python debug新姿勢 -- pysnooper

一般情況下,在項目中都用 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章