该项目很快获取 2200 Star。
PySnooper 是个什么东西?
	
如果你写的 Python 代码不能按如期那样运行,你会绞尽脑汁想为啥出错了。虽然你希望有支持断点的成熟调试器,但或许你现在不想去设置这样的调试器。
你想知道哪些行代码是正常运行,哪些行不正常。据说大多数人会在可疑位置使用 print 输出语句。
其实 PySnooper 的作用有点类似,你不用小心谨慎地用 print 输出语句,只需在想调试的函数中引入一个装饰器。然后得到函数的详细日志,包括运行了哪些行、何时运行,以及何时更改了局部变量。
为什么 PySnooper 能从其他智能调试工具中脱颖而出?
因为你可以在不需要进行任何设置的情况下将其用于糟糕的、庞大的企业代码库中。只需打开装饰器(如下示例所示),并将输出重定向到一个专用的日志文件,将日志文件路径指定为第一个参数。
使用范例
范例是一个把数字转成二进制的函数。
| 
							 
								1 
							
								2 
							
								3 
							
								4 
							
								5 
							
								6 
							
								7 
							
								8 
							
								9 
							
								10 
							
								11 
							
								12 
						 | 
						
							 
									import pysnooper 
								
									@pysnooper.snoop() 
								
									def number_to_bits(number): 
								
									  if number: 
								
									    bits = [] 
								
									    while number: 
								
									      number, remainder = divmod(number, 2) 
								
									      bits.insert(0, remainder) 
								
									    return bits 
								
									  else: 
								
									    return [0] 
								
									number_to_bits(6) 
							 | 
					
输出范例
| 
							 
								1 
							
								2 
							
								3 
							
								4 
							
								5 
							
								6 
							
								7 
							
								8 
							
								9 
							
								10 
							
								11 
							
								12 
							
								13 
							
								14 
							
								15 
							
								16 
							
								17 
							
								18 
							
								19 
							
								20 
							
								21 
							
								22 
							
								23 
							
								24 
							
								25 
						 | 
						
							 
									Starting var:.. number = 6 
								
									21:14:32.099769 call     3 @pysnooper.snoop() 
								
									21:14:32.099769 line     5   if number: 
								
									21:14:32.099769 line     6     bits = [] 
								
									New var:....... bits = [] 
								
									21:14:32.099769 line     7     while number: 
								
									21:14:32.099769 line     8       number, remainder = divmod(number, 2) 
								
									New var:....... remainder = 0 
								
									Modified var:.. number = 3 
								
									21:14:32.099769 line     9       bits.insert(0, remainder) 
								
									Modified var:.. bits = [0] 
								
									21:14:32.099769 line     7     while number: 
								
									21:14:32.099769 line     8       number, remainder = divmod(number, 2) 
								
									Modified var:.. number = 1 
								
									Modified var:.. remainder = 1 
								
									21:14:32.099769 line     9       bits.insert(0, remainder) 
								
									Modified var:.. bits = [1, 0] 
								
									21:14:32.099769 line     7     while number: 
								
									21:14:32.099769 line     8       number, remainder = divmod(number, 2) 
								
									Modified var:.. number = 0 
								
									21:14:32.099769 line     9       bits.insert(0, remainder) 
								
									Modified var:.. bits = [1, 1, 0] 
								
									21:14:32.099769 line     7     while number: 
								
									21:14:32.099769 line    10     return bits 
								
									21:14:32.099769 return   10     return bits 
							 |