「printf 大法」大概是最先期学到的 debug 方式?不一样语言有不一样的指令,在 Python 里对应的是 print
指令 (加上%
或是.format
)。工具
刚刚看到「 cool-RR/pysnooper 」这个 Python 上的工具,只要增长 @pysnooper.snoop
这组 decorator,就能够自动帮你把变量的值打印出來。网站上的范例是这样,能够看到就只是加了一行 decorator:oop
import pysnooper
网站
@pysnooper.snoop
debug
def number_to_bits(number):
code
if number:
orm
bits =
rem
while number:
it
number, remainder = divmod(number, 2)
form
bits.insert(0, remainder)
import
return bits
else:
return [0]
number_to_bits(6)
而后对应的 stderr 就有满满的资讯能够看:
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
另外还能够写到档案里里,能够指定容许的深度,或是直接指定要打印哪些变量。另外输出时,也能够指定 prefix 避免混淆(一般会用在 stderr,也只有 pysnooper 在输出时)