Skip to content

第十三章:常见错误与排错

十大常见错误

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% 的问题别人都遇到过