相信很多小伙伴平時寫python的時候都是需要調試程序的,出問題了,需要了解函數內部是怎么跑的,而這個時候很多人都會想到在疑惑的地方使用print函數來打印一下參數來調試。雖然用print也是不失為是一種方法,但是有時如果疑惑的地方多就要每個地方都要加print,這樣就顯得比較麻煩了。
今天發現在Github開源了一個神器,可以清楚讓你清楚了解函數內部的運行以及參數值的變化,PySnooper,項目地址:https://github.com/cool-RR/PySnooper
使用簡單,強大,誰用誰知道它的好!下面簡單說一下PySnooper的用法:
這個工具使用起來很簡單,首先直接可以使用 pip 安裝:pip install pysnooper使用時,只需要在每個函數前面添加裝飾器即可。
給個簡單例子看看就知道了,
import pysnooper @pysnooper.snoop() def removeDuplicates(nums): """ :type nums: List[int] :rtype: int """ flag = 0 i=1 while i=2: del nums[i-1] i-=1 else: i+=1 flag=0 return len(nums) nums = [1,1,1,2] print(removeDuplicates(nums))
添加裝飾器后,運行代碼就會輸出對應函數的執行數據
Starting var:.. nums = [1, 1, 1, 2]
13:03:44.990194 call??????? 11 def removeDuplicates(nums):
13:03:44.990695 line??????? 16???? flag = 0
New var:....... flag = 0
13:03:44.990695 line??????? 17???? i=1
New var:....... i = 1
13:03:44.990695 line??????? 18???? while i13:03:44.990695 line??????? 19???????? if nums[i]==nums[i-1]:
13:03:44.990695 line??????? 20???????????? flag+=1
Modified var:.. flag = 1
13:03:44.990695 line??????? 21???????????? i+=1
Modified var:.. i = 2
13:03:44.991193 line??????? 22???????????? if flag>=2:
13:03:44.991193 line??????? 18???? while i13:03:44.991193 line??????? 19???????? if nums[i]==nums[i-1]:
13:03:44.991193 line??????? 20???????????? flag+=1
Modified var:.. flag = 2
13:03:44.991193 line??????? 21???????????? i+=1
Modified var:.. i = 3
13:03:44.991193 line??????? 22???????????? if flag>=2:
13:03:44.991193 line??????? 23???????????????? del nums[i-1]
Modified var:.. nums = [1, 1, 2]
13:03:44.991193 line??????? 24???????????????? i-=1
Modified var:.. i = 2
13:03:44.991193 line??????? 18???? while i13:03:44.991193 line??????? 19???????? if nums[i]==nums[i-1]:
13:03:44.991193 line??????? 26???????????? i+=1
Modified var:.. i = 3
13:03:44.991693 line??????? 27???????????? flag=0
Modified var:.. flag = 0
13:03:44.991693 line??????? 18???? while i13:03:44.991693 line??????? 28???? return len(nums)
13:03:44.991693 return????? 28???? return len(nums)
Return value:.. 3
當然如果嫌棄這個直接輸出內容還想保存日志記錄的話,這個裝飾器還幾個可選參數,例如:
@pysnooper.snoop('log/file.log')
先創建好log目錄,然后將日志輸出到file文件中。
@pysnooper.snoop(prefix='removeDuplicates: ')
給調試的行加個前綴名便于辨識和定位,這個參數適用于如果同時調試多個函數使用,我這里的例子是使用了函數名稱來作為前綴名,摘抄一點日志記錄如下:
removeDuplicates: Starting var:.. nums = [1, 1, 1, 2] removeDuplicates: 13:53:14.322036 call 11 def removeDuplicates(nums): removeDuplicates: 13:53:14.323037 line 16 flag = 0
@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
查看非本地變量
@pysnooper.snoop(depth=2)
顯示函數中調用函數的snoop行,depth參數的取值范圍是大于或等于1的正整數,在源碼里有這樣一個判斷:assert self.depth >= 1,當取小于1的值就會拋異常
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
