10.Python的设置代码格式与避免缩进错误完全指南

Python 的设置代码格式与避免缩进错误完全指南

本文档面向零基础新手,详细讲解 为什么要重视代码格式缩进规则常见格式规范如何设置编辑器,以及 如何避免缩进错误,并配有大量正确与错误示例。


第一部分:为什么 Python 特别重视格式?

一、缩进是语法的一部分

在很多语言里,缩进只是为了“好看”。在 Python 里,缩进是语法:用缩进来表示代码块(哪些代码属于同一个 if、for、函数等)。缩进错了,要么报错,要么逻辑完全错。

示例:缩进决定“谁属于谁”

# 正确:print 属于 if,只有条件成立才执行
if True:
    print("会执行")

# 错误:print 没有缩进,不属于 if,会报错
# if True:
# print("会执行")   # IndentationError

所以:格式不是可选项,而是写对代码的前提。


二、格式混乱会导致的问题

  • IndentationError:缩进不一致、该缩进没缩进,直接报错无法运行
  • 逻辑错误:该在循环里的代码缩到外面,或该在 if 里的缩错了,程序行为完全不对
  • 难读难改:别人和自己以后都看不懂

下面逐项说明如何设置格式、避免缩进错误。


第二部分:缩进规则(必须遵守)

三、同一代码块必须缩进一致

代码块:例如 iffordef 后面的冒号 : 下面的若干行,构成一个块。这些行必须缩进相同,且比 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 + bx = 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 CodePyCharm等中,建议:

  1. Indent Using Spaces(用空格缩进)
  2. Tab Size / Indent Size = 4
  3. 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 indentunindent 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与空格混用、该缩进未缩进

发表评论