第十三章:常见错误与排错
十大常见错误
bash
# ❌ 错误1:IndentationError — 缩进不对
# if True:
# print("hello") # 应该缩进!
# ✅ 正确:
if True:
print("hello")
# ❌ 错误2:NameError — 使用未定义的变量
# print(username) # username 没有定义
# ✅ 正确:
username = "小明"
print(username)
# ❌ 错误3:TypeError — 类型不匹配
# result = "年龄:" + 18 # 字符串和数字不能直接拼接
# ✅ 正确:
result = "年龄:" + str(18)
print(result)
# ❌ 错误4:IndexError — 索引越界
# lst = [1, 2, 3]
# print(lst[10]) # 只有3个元素,索引最大是2
# ✅ 正确:
lst = [1, 2, 3]
print(lst[2]) # 最后一个合法索引
# ❌ 错误5:KeyError — 字典键不存在
# d = {"name": "小明"}
# print(d["age"]) # 没有 "age" 键
# ✅ 正确:
d = {"name": "小明"}
print(d.get("age", "未知"))bash
hello
小明
年龄:18
3
未知bash
# ❌ 错误6:AttributeError — 对象没有该属性
# num = 42
# num.append(1) # 整数没有 append 方法
# ✅ 正确:
num = [42]
num.append(1)
print(num)
# ❌ 错误7:ValueError — 值不合法
# num = int("hello") # 不能把 "hello" 转成整数
# ✅ 正确:
num = int("42")
print(num)
# ❌ 错误8:SyntaxError — 语法错误
# if True # 缺少冒号
# print("hi")
# ✅ 正确:
if True:
print("hi")
# ❌ 错误9:ModuleNotFoundError — 模块不存在
# import nonexistent_module
# ✅ 正确:先 pip install,再 import
import json
print("json 模块已加载")
# ❌ 错误10:FileNotFoundError — 文件不存在
# f = open("nonexistent.txt")
# ✅ 正确:先检查文件是否存在
import os
if os.path.exists("hello.txt"):
with open("hello.txt") as f:
print(f.read())
else:
print("文件不存在")bash
[42, 1]
42
hi
json 模块已加载
文件不存在调试技巧
bash
# 技巧1:print 大法(最原始但有效)
def calculate(data):
print(f"DEBUG: 输入数据 = {data}") # 临时调试输出
result = sum(data) / len(data)
print(f"DEBUG: 计算结果 = {result}")
return result
calculate([10, 20, 30])
# 技巧2:使用 assert 断言
def divide(a, b):
assert b != 0, "除数不能为零!"
return a / b
print(divide(10, 2))
# 技巧3:使用 pdb 调试器
# 在代码中插入 breakpoint() 可以启动交互式调试
# breakpoint() # 取消注释即可使用
# 技巧4:使用 logging 代替 print
import logging
logging.basicConfig(level=logging.DEBUG, format="%(levelname)s: %(message)s")
logging.debug("调试信息")
logging.info("一般信息")
logging.warning("警告信息")
logging.error("错误信息")bash
DEBUG: 输入数据 = [10, 20, 30]
DEBUG: 计算结果 = 20.0
5.0
DEBUG: 调试信息
INFO: 一般信息
WARNING: 警告信息
ERROR: 错误信息💡 提示: 💡 调试口诀:读错误信息— Python 的 Traceback 已经告诉你哪一行出了什么问题从最后往上读— 最后一行是错误类型和描述,往上找出错的行号缩小范围— 注释掉部分代码,二分法定位 BugGoogle 是你的好朋友— 复制错误信息搜索,99% 的问题别人都遇到过