Skip to content

Python 缩进

与 C/Java 等用 { } 划分代码块不同,Python 用行首空白表示块结构:同一逻辑块内的语句必须同级缩进,否则会在运行时触发 IndentationErrorTabError

PEP 8 建议:每层缩进 4 个空格不要混用 Tab 与空格。相关控制流见 if / else / elif循环函数

缩进表示什么?

缩进指一行代码开头空格或 Tab。进入函数体、ifforwhileclass 等子句时,需要加深一级;块结束则回到上一级

python
def foo():
    print("Hi")

    if True:
        print("true")
    else:
        print("false")


print("Done")

if / elseprint("Hi") 同属 foo 体,因此对齐;print("true")if 子句内,再多缩进一级。

常用规则(简记)

  1. 同一语法块内,各行缩进必须一致(空格数量或 Tab 策略一致)。
  2. 不要混用 Tab 与空格(易触发 TabError,且不同编辑器显示不一)。
  3. 推荐只用空格每层 4 个空格(与 PEP 8、多数编辑器默认一致)。
  4. 模块顶层(不在任何函数/类里的语句)一般顶格书写;若整文件多缩进一层,会得到 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")  # 与前一行空格数不一致

会报 IndentationErrorunindent does not match 等)。

3. 顶层多缩进

python
if True:
    print("true")
else:
    print("false")

 print("Done")  # 行首多了一个空格:与外层缩进对不齐 → IndentationError

print("Done") 若要作为模块顶层语句,必须与 if 一样顶格

4. 该缩进却没缩进

python
if True:
print("true")

IndentationError: expected an indented blockif 子句体不能为空且不缩进。

小结

  • Python 用缩进定义块PEP 8 推荐 4 空格勿混 Tab/空格
  • 出错时先看:是否同级对齐是否多/少缩进复制粘贴是否带入杂乱空白

参考