hand
_1_5_22
4
返回栏目
1k
9k
1k
1k
5k
1k
1k
1k
1k
3k
2k
1k
0.8k
2k
3k
1k
1k
0.7k
0.9k
1k
0.6k
0.4k
0.4k
0.3k
3k
2k
9k
0.4k
0.4k
0.8k
0.5k
3k
5k
1k
2k
2k
3k
5k
1k
1k
0.4k
0.5k
0.4k
0.6k
0.7k
1k
0.4k
0.3k
4k
0.5k
0k
0.3k
0k
0.2k
0.2k
0.3k
0.9k
0.9k
0.1k
0.9k
0.9k
1k
0.5k
6k
0.3k
0.4k
0.7k
0.6k
8k
3k
1k
1k
1k
1k
0k
2k
1k
1k
0.2k
5k
4k
5k
0.4k
0.8k
1k
1k
1k
0.1k
2k
1k
2k
6k
0k
2k
7k
1k
5k
2k
3k
1k
0k
1k
0.9k
0.4k
0.2k
1k
3k
4k
1k
1k
1k
2k
3k
0.7k
0.3k
0.5k
0.6k
1k
0.9k
3k
0.3k
4k
返回python栏目
作者:
贺及楼
成为作者
更新日期:2024-10-28 10:00:00
Python 的 pysnooper 库是一个强大的调试工具,它允许开发者以最小的努力跟踪代码的执行过程。与传统的调试工具相比,pysnooper 不需要设置断点,只需一个装饰器或者一个简单的函数调用,就可以输出代码执行的详细过程,极大地简化了调试工作。
pip install pysnooper # 安装 pysnooper
import pysnooper
@pysnooper.snoop()
def A():
try:
print("begin")
a = []
a.append("NO1")
a.append("NO2")
return a
except:
print("fail")
if __name__ == "__main__":
data = A()
print(data)
# 代码调用时间 行号 代码片段
# 新的/修改的值(New Modified var)
# 返回值(Return value)
# 一共消耗时间(Elapsed time)
09:19:34.417000 call 4 def A():
09:19:34.420000 line 5 try:
09:19:34.421000 line 6 print("begin")
begin
09:19:34.422000 line 7 a = []
New var:....... a = []
09:19:34.422000 line 8 a.append("NO1")
Modified var:.. a = ['NO1']
09:19:34.423000 line 9 a.append("NO2")
Modified var:.. a = ['NO1', 'NO2']
09:19:34.424000 line 10 return a
09:19:34.426000 return 10 return a
Return value:.. ['NO1', 'NO2']
Elapsed time: 00:00:00.011000
['NO1', 'NO2']
这里可以看见打印了很多信息,有文件名称、方法名、执行语句、变量变化、返回变量值、执行时间,这样在打印很多东西的时候会很复杂,所以建议要进行方法的划分,不要一个方法写很多逻辑
@pysnooper.snoop(output='/var/log/debug.log') # 重定向到日志文件
@pysnooper.snoop(watch=('out["foo"]')) # 跟踪非局部变量值:值有变化时,也将其打印出来
@pysnooper.snoop(depth=2) # 设置跟踪函数的深度
@pysnooper.snoop(output="/var/log/debug.log", prefix="demo_func: ") # 设置调试日志的前缀
@pysnooper.snoop(max_variable_length=200) # 设置最大的输出长度
@pysnooper.snoop(max_variable_length=None) # 设置最大的输出长度
@pysnooper.snoop(thread_info=True) # 支持多线程调试模式
@pysnooper.snoop(custom_repr=(Person, print_person_obj)) # 自定义对象的格式输出
pysnooper.snoop() 函数有一个参数是 custom_repr,它接收一个元组对象。
在这个元组里,你可以指定特定类型的对象以特定格式进行输出。
假如我要跟踪 person 这个 Person 类型的对象,由于它不是常规的 Python 基础类型,PySnooper 是无法正常输出它的信息的。
因此我在 pysnooper.snoop() 函数中设置了 custom_repr 参数,该参数:
第一个元素为 Person
第二个元素为 print_persion_obj 函数。
PySnooper 在打印对象的调试信息时,会逐个判断它是否是 Person 类型的对象,若是,就将该对象传入 print_persion_obj 函数中,由该函数来决定如何显示这个对象的信息。
python
整章节共122节
快分享给你的小伙伴吧 ~