跳到主要内容

附录 A:常见报错速查

报错不可怕,它是 Python 在告诉你哪里出了问题。怎么读报错信息

Traceback (most recent call last):
File "test.py", line 3, in <module> ← 出错的文件和行号
print(10 / 0) ← 出错的那行代码
ZeroDivisionError: division by zero ← 错误类型:错误说明(最重要,先看这行)

从最后一行往上看:先看错误类型和说明,再根据行号定位代码。


SyntaxError 语法错误

含义:代码写法不符合 Python 语法,程序根本没开始运行。

常见原因:

症状原因
invalid character '('用了中文标点(括号、引号、逗号)
expected ':'if/for/while/def 行末忘写冒号
unterminated string literal引号没配对,少了一半
invalid syntax 指向 =判断相等写成了 =,应为 ==
'(' was never closed括号没配对

IndentationError 缩进错误

含义:缩进不对。

if age > 18:
print("成年") # ❌ expected an indented block:冒号后必须缩进
  • 同一层级的代码缩进必须完全一致(都用 4 个空格)
  • 不要 Tab 和空格混用(VS Code 默认帮你处理好了)

NameError 名字错误

含义:用了一个不存在的变量或函数名。

NameError: name 'pirnt' is not defined

常见原因:拼写错误(pirnt → print)、变量还没赋值就使用、大小写不对(True 写成 true)。

TypeError 类型错误

含义:对某种类型做了它不支持的操作。

报错原因与解法
can only concatenate str (not "int") to str字符串 + 数字。解法:"age: " + str(18) 或用 f-string
'str' object is not callable常见于把 print 等内置名当变量用了:print = 5 之后 print 就坏了。别用内置函数名当变量名
takes 0 positional arguments but 1 was given类的方法忘了写 self
'int' object is not iterablefor i in 5: 应为 for i in range(5):

ValueError 值错误

含义:类型对但值不对。

ValueError: invalid literal for int() with base 10: 'abc'

最常见于 int(input()) 时用户输入了非数字。解法:用 try...except 包住(见第 8 章)。

IndexError 索引越界

IndexError: list index out of range

列表只有 3 个元素,你却访问 lst[3](最大合法索引是 2)。检查索引范围,记住索引从 0 开始

KeyError 键不存在

KeyError: 'phone'

字典里没有这个键。解法:先用 in 判断,或改用 d.get("phone", 默认值)

FileNotFoundError 文件不存在

FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'

常见原因:

  1. 文件名拼错、后缀写错(data.txt.txt 的惨案:Windows 隐藏了扩展名)
  2. 文件不在当前工作目录。程序找文件是从"运行程序时所在的目录"找的,不一定是 py 文件所在目录。最稳妥的办法是用完整路径,或在 VS Code 中设置 Execute in file dir

ModuleNotFoundError 模块不存在

ModuleNotFoundError: No module named 'requests'
  1. 第三方库没安装 → pip install requests
  2. 自己的模块名拼错,或不在同一目录
  3. ⚠️ 自己的文件名和库重名(比如你建了个 random.py,再 import random 导入的是你自己的文件)——不要用库名给自己的文件命名

UnicodeDecodeError 编码错误

UnicodeDecodeError: 'gbk' codec can't decode byte...

Windows 上读中文文件的经典报错。解法:open() 时永远写上 encoding="utf-8"

ZeroDivisionError 除以零

ZeroDivisionError: division by zero

除数是 0。在除法前判断,或用 try...except。


排错通用流程

  1. 看报错最后一行:什么类型?说明写了什么?
  2. 看行号:定位到出错的那一行(有时真正的错在它上面几行,比如少了括号)
  3. 读不懂就搜:把报错最后一行原样复制去搜索引擎 / 问 AI
  4. 打印大法:在可疑位置加 print(变量, type(变量)),看看变量到底是什么