理解错误类型
Python 主要有几类错误:
- SyntaxError: 语法错误
- NameError: 未定义的变量/函数
- TypeError: 类型错误
- ValueError: 值错误
- AttributeError: 属性错误
- ImportError: 导入错误
- IndexError: 索引错误
- KeyError: 字典键错误
阅读错误信息的技巧
Traceback (most recent call last):
File "script.py", line 10, in <module> # 错误发生的文件和行号
some_function()
File "script.py", line 5, in some_function
result = 10 / 0 # 具体出错的行
ZeroDivisionError: division by zero # 错误类型和描述
关键信息:
- 错误类型(最后一行)
- 错误发生的具体位置(文件名和行号)
- 调用栈(从下往上读)
调试技巧
使用 print 调试
def complex_function(data):
print(f"输入数据: {data}") # 调试信息
result = process_data(data)
print(f"处理结果: {result}") # 调试信息
return result
使用 pdb 调试器
import pdb
def problematic_function():
x = 10
pdb.set_trace() # 在这里设置断点
y = x / 0
return y
使用 loggingpython
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def function():
logger.debug("开始执行函数")
try:
result = risky_operation()
logger.info(f"操作成功: {result}")
except Exception as e:
logger.error(f"操作失败: {e}")
raise
异常处理最佳实践
具体异常处理
# 不好的做法
try:
result = risky_operation()
except: # 捕获所有异常
pass
# 好的做法
try:
result = risky_operation()
except ValueError as e:
print(f"值错误: {e}")
except TypeError as e:
print(f"类型错误: {e}")
except Exception as e:
print(f"未知错误: {e}")
raise # 重新抛出未知异常
使用 with 语句
# 自动处理资源清理
with open('file.txt', 'r') as f:
content = f.read()
# 文件会自动关闭
调试工具推荐
IDE 调试器
- PyCharm: 强大的图形化调试器
- VS Code: 集成调试功能
- Jupyter: 交互式调试
命令行工具
# 使用 -v 查看详细导入信息
python -v script.py
# 使用 -c 检查语法
python -m py_compile script.py
# 使用 -u 禁用输出缓冲
python -u script.py
预防性编程
类型提示
from typing import List, Dict, Optional
def process_data(data: List[str]) -> Optional[Dict[str, int]]:
if not data:
return None
return {"count": len(data)}
断言
def divide(a: float, b: float) -> float:
assert b != 0, "除数不能为零"
return a / b
单元测试
import unittest
class TestMyFunction(unittest.TestCase):
def test_normal_case(self):
result = my_function("test")
self.assertEqual(result, "expected")
def test_edge_case(self):
with self.assertRaises(ValueError):
my_function("")
错误排查检查清单
- 确认错误类型和位置
- 检查变量值和类型
- 验证函数参数和返回值
- 确认导入的模块和函数
- 检查文件路径和权限
- 验证网络连接(如果涉及)
- 检查依赖包版本
- 查看相关文档和示例
官方文档
- 官网: https://www.python.org/
- 文档中心: https://docs.python.org/
- 中文文档: https://docs.python.org/zh-cn/
- 语言参考:
https://docs.python.org/3/reference/
https://docs.python.org/3/reference/lexical_analysis.html - 标准库: https://docs.python.org/3/library/
- 内置异常: https://docs.python.org/3/library/exceptions.html
- 异常层次结构: https://docs.python.org/3/library/exceptions.html#exception-hierarchy
在线工具
在线解析器
https://www.jyshare.com/compile/9
快速诊断命令
# 检查语法
python -m py_compile your_script.py
# 详细语法检查
python -m py_compile -v your_script.py
# 使用 ast 模块检查语法
python -c "import ast; ast.parse(open('your_script.py').read())"