Python 的设置代码格式与避免缩进错误完全指南
本文档面向零基础新手,详细讲解 为什么要重视代码格式、缩进规则、常见格式规范、如何设置编辑器,以及 如何避免缩进错误,并配有大量正确与错误示例。
第一部分:为什么 Python 特别重视格式?
一、缩进是语法的一部分
在很多语言里,缩进只是为了“好看”。在 Python 里,缩进是语法:用缩进来表示代码块(哪些代码属于同一个 if、for、函数等)。缩进错了,要么报错,要么逻辑完全错。
示例:缩进决定“谁属于谁”
# 正确:print 属于 if,只有条件成立才执行
if True:
print("会执行")
# 错误:print 没有缩进,不属于 if,会报错
# if True:
# print("会执行") # IndentationError
所以:格式不是可选项,而是写对代码的前提。
二、格式混乱会导致的问题
- IndentationError:缩进不一致、该缩进没缩进,直接报错无法运行
- 逻辑错误:该在循环里的代码缩到外面,或该在 if 里的缩错了,程序行为完全不对
- 难读难改:别人和自己以后都看不懂
下面逐项说明如何设置格式、避免缩进错误。
第二部分:缩进规则(必须遵守)
三、同一代码块必须缩进一致
代码块:例如 if、for、def 后面的冒号 : 下面的若干行,构成一个块。这些行必须缩进相同,且比 if/for/def 多一级。
一级缩进:通常用 4 个空格(推荐)或 1 个 Tab。整份文件里只能选一种:要么全用空格,要么全用 Tab,不能混用。
正确示例:
if 1 < 2:
print("成立") # 这行缩进 4 格
print("还是成立") # 这行也缩进 4 格
错误示例:缩进不一致
# 错误:第一行 4 格,第二行 2 格,会报 IndentationError
# if 1 < 2:
# print("成立")
# print("错了") # 缩进和上一行不一致
四、冒号后面的下一行必须缩进
遇到 :(if、elif、else、for、while、def、class、try、except 等),下一行必须比这一行多缩进,否则报错。
正确:
for i in range(3):
print(i)
错误:
# for i in range(3):
# print(i) # 没有缩进,IndentationError
五、不该缩进时不要多缩进
和“该缩进必须缩进”相反:不属于某个块的代码,不要多缩进,否则会被误认为属于上面的 if/for,导致逻辑错误。
错误示例:不该缩进的缩进了
x = 10
y = 20 # 错误:y = 20 不属于任何块,不能缩进
正确:
x = 10
y = 20
六、多层嵌套时逐级多缩进一层
if 里再写 if、for 里再写 if,每多一层,就再多缩进一级(通常一级 4 个空格)。
示例:
for i in range(2):
print("外层", i)
if i == 1:
print("内层") # 比 if 多一级,比 for 多两级
七、空格 vs Tab:只选一种,不要混用
- 推荐:整份文件用 4 个空格 表示一级缩进(Python 官方和 PEP 8 推荐)。
- 可以:整份文件都用 Tab,但和多数教程、示例不一致。
- 禁止:同一文件里有的行用空格、有的用 Tab,容易出 IndentationError,且看不出差别。
建议:在编辑器里设置“按 Tab 键时插入 4 个空格”,这样键盘只按一次,实际存的是空格,既统一又符合规范。
第三部分:常见格式规范(PEP 8)
八、PEP 8 是什么?
PEP 8 是 Python 官方的代码风格指南(“怎么写更统一、更易读”)。不是语法强制,但建议遵守,尤其是:
- 缩进用 4 个空格
- 每行不要太长(一般不超过 88 或 120 字符,可配置)
- 运算符两边、逗号后面加空格等
下面只写最常用、新手最容易踩坑的几条。
九、缩进:4 个空格
一级缩进 = 4 个空格。不要用 2 个、6 个、8 个混用。
# 推荐
def foo():
if True:
print("ok")
十、行长度与换行
一行太长(例如超过 88 字符)可读性差。可以:
- 把长表达式拆成多行;或
- 在合适的地方换行,下一行多缩进一级(或与括号内首行对齐)
简单示例:
# 长列表可拆行
nums = [
1, 2, 3,
4, 5, 6,
]
十一、空格:运算符两边、逗号后
- 运算符两边加一个空格:
a + b、x = 1 - 逗号后面加一个空格:
(1, 2)、print(a, b)(逗号前可加可不加,一致即可)
# 推荐
x = 1 + 2
lst = [1, 2, 3]
十二、空行:函数之间、逻辑块之间
- 顶层函数、类定义之间:空 2 行
- 类内方法之间:空 1 行
- 同一函数内,不同逻辑块之间可空 1 行,便于阅读
def first():
pass
def second():
pass
第四部分:如何设置编辑器(统一格式、避免缩进错)
十三、核心设置:Tab = 4 个空格、用空格代替 Tab
在 VS Code、PyCharm等中,建议:
- Indent Using Spaces(用空格缩进)
- Tab Size / Indent Size = 4
- Insert Spaces when pressing Tab(按 Tab 键插入空格)
这样你按一次 Tab,得到 4 个空格,不会混入 Tab 字符。
VS Code:
文件 → 首选项 → 设置,搜索 “tab size”“insert spaces”,在“针对 Python”里可单独设成 4 空格。
PyCharm:
File → Settings → Editor → Code Style → Python → Indent:勾选 “Use space character”,Indent size 填 4,Tab size 填 4。
十四、保存时自动格式化(可选)
很多编辑器支持“保存时按 PEP 8 自动格式化”:
- VS Code:安装 Python 扩展后,可启用 “Format On Save”,并选择格式化工具(如 autopep8、black)。
- PyCharm:可在 Settings → Tools → Actions on Save 里勾选 “Reformat code”。
这样写完后保存,缩进、空格等会自动统一,减少手误。
第五部分:避免缩进错误——常见错误与改正
十五、错误 1:冒号后没有缩进
现象: IndentationError: expected an indented block
原因: 冒号下一行没有比上一行多缩进。
错误:
if True:
print("错") # 这行应该缩进
改正:
if True:
print("对")
十六、错误 2:同一块内缩进不一致
现象: IndentationError: unexpected indent 或 unindent does not match any outer indentation level
原因: 同一 if/for/def 块里,有的行 4 格,有的 2 格或 6 格;或混用了 Tab 和空格。
错误:
if True:
print("A")
print("B") # 缩进和上一行不一致
改正: 同一块内全部用相同缩进(如都 4 格)。
if True:
print("A")
print("B")
十七、错误 3:多缩进(不该缩进的缩进了)
现象: 逻辑错误或 unexpected indent。
错误: 和 if/for 无关的代码也缩进了,被当成块的一部分。
x = 1
y = 2 # 错误:顶层代码不应缩进
改正:
x = 1
y = 2
十八、错误 4:少缩进(该在块里的没缩进)
现象: 逻辑错误:本应在循环或 if 里多次执行的代码只执行了一次。
错误:
for i in range(3):
print(i) # 没有缩进,不属于 for,只执行一次且 i 可能是上一次的值或报错
改正:
for i in range(3):
print(i)
十九、错误 5:Tab 和空格混用
现象: 看起来对齐了,但报 IndentationError,或不同编辑器显示不一致。
原因: 有的行用 Tab,有的用 4 个空格,Python 会把 Tab 和空格区分开,导致“看起来对齐但实际缩进级别错”。
改正: 全文只用空格(推荐 4 格)。在编辑器里开启“用空格代替 Tab”,并可用“显示空白字符”检查是否还有 Tab。
第六部分:正确与错误示例对比
二十、if / for / def 示例
正确:
def greet(name):
if name:
print("你好,", name)
print("结束") # 和 if 同级,属于 def
错误: print 缩进和 if 里的 print 不一致,或“结束”误缩进到 if 里,会导致逻辑或报错。
# 错误示例
# def greet(name):
# if name:
# print("你好", name)
# print("结束") # 缩进错:既不是 if 块也不是 def 块一致级别
二十一、多层嵌套示例
正确:
for i in range(2):
print("i =", i)
for j in range(2):
print(" j =", j)
错误: 内层 for 的 print 若和外层 for 的 print 缩进一样,就会变成“只属于外层 for”,内层循环没有 body,可能报错或逻辑错。
第七部分:小结与自检清单
二十二、缩进自检清单
- [ ] 每个带
:的语句下面一行是否多缩进了一级? - [ ] 同一 if/for/def 块里的每一行缩进是否完全一致?
- [ ] 有没有把“不该属于某块”的代码多缩进了?
- [ ] 有没有把“该在块里”的代码少缩进了?
- [ ] 整份文件是否只用空格(或只用 Tab),没有混用?
- [ ] 一级缩进是否统一为 4 个空格(推荐)?
二十三、小结表
| 内容 | 要点 |
|---|---|
| 为什么重要 | 缩进是语法,决定代码块;格式错会报错或逻辑错 |
| 基本规则 | 冒号后必须缩进;同一块缩进一致;不要多缩进、少缩进 |
| 空格 vs Tab | 只选一种,推荐全用 4 个空格,编辑器设“Tab 插入空格” |
| PEP 8 | 4 空格缩进、运算符逗号旁加空格、行不要太长、合理空行 |
| 编辑器 | 设 Tab=4 空格、用空格代替 Tab;可选保存时自动格式化 |
| 常见错误 | 冒号后未缩进、同块不一致、Tab与空格混用、该缩进未缩进 |