Python 缩进
与 C/Java 等用 { } 划分代码块不同,Python 用行首空白表示块结构:同一逻辑块内的语句必须同级缩进,否则会在运行时触发 IndentationError 或 TabError。
PEP 8 建议:每层缩进 4 个空格;不要混用 Tab 与空格。相关控制流见 if / else / elif、循环、函数。
缩进表示什么?
缩进指一行代码开头的空格或 Tab。进入函数体、if、for、while、class 等子句时,需要加深一级;块结束则回到上一级。
python
def foo():
print("Hi")
if True:
print("true")
else:
print("false")
print("Done")if / else 与 print("Hi") 同属 foo 体,因此对齐;print("true") 在 if 子句内,再多缩进一级。
常用规则(简记)
- 同一语法块内,各行缩进必须一致(空格数量或 Tab 策略一致)。
- 不要混用 Tab 与空格(易触发
TabError,且不同编辑器显示不一)。 - 推荐只用空格,每层 4 个空格(与 PEP 8、多数编辑器默认一致)。
- 模块顶层(不在任何函数/类里的语句)一般顶格书写;若整文件多缩进一层,会得到
unexpected indent。
技术上可以用 2 空格等,但团队内要统一;教程与社区默认以 4 空格为主。
好处与注意点
- 可读性:结构一眼可见,不必配对花括号。
- 复制粘贴:从网页、PDF 复制代码时容易带入错乱空格,出错时逐行对齐即可。
- 习惯花括号的开发者需要适应「缩进即语法」这一点。
for 循环示例
python
def print_numbers(x, y):
for i in range(x, y):
print(i)print(i) 必须比 for 多缩进一级。
常见错误
1. 不应有的行首缩进
text
>>> x = 10
IndentationError: unexpected indent交互环境或脚本顶层不要随意缩进。
2. 同一块内缩进不一致
python
if True:
print("true")
print("Hi") # 与前一行空格数不一致会报 IndentationError(unindent does not match 等)。
3. 顶层多缩进
python
if True:
print("true")
else:
print("false")
print("Done") # 行首多了一个空格:与外层缩进对不齐 → IndentationErrorprint("Done") 若要作为模块顶层语句,必须与 if 一样顶格。
4. 该缩进却没缩进
python
if True:
print("true")IndentationError: expected an indented block:if 子句体不能为空且不缩进。
小结
- Python 用缩进定义块;PEP 8 推荐 4 空格,勿混 Tab/空格。
- 出错时先看:是否同级对齐、是否多/少缩进、复制粘贴是否带入杂乱空白。