分享几个我常用的 Python 调试技巧
在日常 Python 开发中,调试占据了我们很大一部分时间。很多人遇到 Bug 第一反应就是加 print,但每次改代码、重新运行,效率很低。今天分享几个我实际项目中常用的调试技巧,希望能帮到你。
1. 善用 breakpoint() 代替 print
从 Python 3.7 开始,内置的 breakpoint() 函数可以直接启动 pdb 调试器。相比 print 大法,它的好处是:
- 不需要预先知道问题在哪
- 可以随时暂停观察变量
- 支持继续执行、单步跟踪
用法很简单,在代码的任何位置插入:
def process_data(items): breakpoint() # 执行到这里会自动进入调试模式 for item in items: print(item)运行后会自动进入 (Pdb) 交互模式,输入变量名查看当前值,输入 c 继续执行,输入 n 跳到下一行,输入 s 进入函数内部。比来回加 print 优雅太多了。
2. 使用 rich 让调试输出更清晰
标准 print 输出的复杂数据结构很难看。推荐安装 rich 库:
pip install rich然后用它来格式化输出:
from rich import print from rich.pretty import pprint data = {"users": [{"name": "Alice", "scores": [85, 92, 88]}]} pprint(data, indent_guides=True)rich 会对字典、列表做语法高亮和缩进对齐,一眼就能看出结构问题。配合 inspect() 函数,还能快速查看对象的属性和方法。
3. 用 traceback 模块定位异常来源
有时候异常信息不够详细,不知道具体是哪行代码出的问题。试试用 traceback 模块打印完整调用栈:
import traceback try: result = risky_function() except Exception: traceback.print_exc() # 打印完整的异常堆栈更高级的用法是 format_exc(),可以把堆栈字符串保存到日志文件里,方便回头查看。
4. 小技巧:用 dir() 和 help() 快速查 API
调试时经常遇到「这个对象有哪些方法」的问题。与其去翻文档,不如直接在调试器里用:
dir(obj) # 返回对象所有属性和方法 help(obj.method) # 查看方法的详细文档这两个内置函数在 breakpoint() 调试模式下特别好用,不用离开编辑器环境就能查清楚 API 细节。
5. 用 __repr__ 让自定义对象可直接调试
定义一个类时,实现 __repr__ 方法能让调试输出变得更友好:
class User: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"User(name={self.name!r}, age={self.age})" user = User("张三", 28) print(user) # 输出:User(name='张三', age=28)这样在调试时看到对象就能直接了解它的状态,不用一个个去查属性值。
总结
以上就是我日常开发中经常用到的五个调试技巧。从断点调试到输出美化,从异常定位到对象展示,每个都能在实际工作中提升效率。如果你也有好用的调试方法,欢迎在评论区分享交流。