一般情況下,在項目中都用 Pycharm 來進行debug, 但是不方便的時候怎麼辦呢? 還用老舊的 logger 嗎?今天發現 pysnooper 的工具,真是超級方便,可以把函數每一步執行的輸出都打到文件中。
- 首先,你要安裝它
pip install pysnooper
- 然後,使用它, pysnooper 可以以裝飾器的方式放到你想debug的函數上,然後指定輸出文件, 也可以不輸出,直接打到控制檯
import pysnooper
@pysnooper.snoop('test.log')
def main():
a = 1
b = 5
while a < b:
a += 1
if __name__ == '__main__':
main()
輸出如下:
11:16:41.756880 call 4 def main():
11:16:41.757319 line 5 a = 1
New var:....... a = 1
11:16:41.757601 line 6 b = 20
New var:....... b = 20
11:16:41.757867 line 7 while a < b:
11:16:41.758004 line 8 a += 1
Modified var:.. a = 2
11:16:41.758232 line 7 while a < b:
11:16:41.758363 line 8 a += 1
Modified var:.. a = 3
11:16:41.758583 line 7 while a < b:
11:16:41.758714 line 8 a += 1
Modified var:.. a = 4
11:16:41.758932 line 7 while a < b:
11:16:41.759058 line 8 a += 1
Modified var:.. a = 5
11:16:41.759277 line 7 while a < b:
11:16:41.759404 line 8 a += 1
Modified var:.. a = 6
11:16:41.759623 line 7 while a < b:
11:16:41.759750 line 8 a += 1
Modified var:.. a = 7
11:16:41.759968 line 7 while a < b:
11:16:41.760095 line 8 a += 1
Modified var:.. a = 8
11:16:41.760312 line 7 while a < b:
11:16:41.760437 line 8 a += 1
Modified var:.. a = 9
11:16:41.760653 line 7 while a < b:
11:16:41.760778 line 8 a += 1
Modified var:.. a = 10
11:16:41.760994 line 7 while a < b:
11:16:41.761119 line 8 a += 1
Modified var:.. a = 11
11:16:41.761336 line 7 while a < b:
11:16:41.761462 line 8 a += 1
Modified var:.. a = 12
11:16:41.761682 line 7 while a < b:
11:16:41.761809 line 8 a += 1
Modified var:.. a = 13
11:16:41.762026 line 7 while a < b:
11:16:41.762151 line 8 a += 1
Modified var:.. a = 14
11:16:41.762402 line 7 while a < b:
11:16:41.762620 line 8 a += 1
Modified var:.. a = 15
11:16:41.762853 line 7 while a < b:
11:16:41.762983 line 8 a += 1
Modified var:.. a = 16
11:16:41.763217 line 7 while a < b:
11:16:41.763353 line 8 a += 1
Modified var:.. a = 17
11:16:41.763564 line 7 while a < b:
11:16:41.763687 line 8 a += 1
Modified var:.. a = 18
11:16:41.763918 line 7 while a < b:
11:16:41.764040 line 8 a += 1
Modified var:.. a = 19
11:16:41.764245 line 7 while a < b:
11:16:41.764364 line 8 a += 1
Modified var:.. a = 20
11:16:41.764612 line 7 while a < b:
11:16:41.764730 return 7 while a < b:
Return value:.. None
- 當然,如果你不想 debug 整個函數,也可以在函數內部指定dubug的代碼塊
import pysnooper
def main():
a = 1
b = 5
c = 0
while a < b:
a += 1
with pysnooper.snoop('test2.log'):
c += a
if __name__ == '__main__':
main()
輸出如下:
New var:....... a = 2
New var:....... b = 5
New var:....... c = 0
11:16:07.802545 line 11 c += a
New var:....... a = 3
New var:....... b = 5
New var:....... c = 2
11:16:07.803153 line 10 with pysnooper.snoop('test2.log'):
11:16:07.803323 line 11 c += a
New var:....... a = 4
New var:....... b = 5
New var:....... c = 5
11:16:07.803789 line 10 with pysnooper.snoop('test2.log'):
11:16:07.804074 line 11 c += a
New var:....... a = 5
New var:....... b = 5
New var:....... c = 9
11:16:07.804646 line 10 with pysnooper.snoop('test2.log'):
11:16:07.804821 line 11 c += a
好像這兩種已經日常夠用了,如果還想再用一些高級用法,參閱:https://github.com/cool-RR/pysnooper