python調(diào)試神器PySnooper的使用
相信很多小伙伴平時(shí)寫python的時(shí)候都是需要調(diào)試程序的,出問題了,需要了解函數(shù)內(nèi)部是怎么跑的,而這個(gè)時(shí)候很多人都會(huì)想到在疑惑的地方使用print函數(shù)來打印一下參數(shù)來調(diào)試。雖然用print也是不失為是一種方法,但是有時(shí)如果疑惑的地方多就要每個(gè)地方都要加print,這樣就顯得比較麻煩了。
今天發(fā)現(xiàn)在Github開源了一個(gè)神器,可以清楚讓你清楚了解函數(shù)內(nèi)部的運(yùn)行以及參數(shù)值的變化,PySnooper,項(xiàng)目地址:https://github.com/cool-RR/PySnooper
使用簡(jiǎn)單,強(qiáng)大,誰用誰知道它的好!下面簡(jiǎn)單說一下PySnooper的用法:
這個(gè)工具使用起來很簡(jiǎn)單,首先直接可以使用 pip 安裝:pip install pysnooper使用時(shí),只需要在每個(gè)函數(shù)前面添加裝飾器即可。
給個(gè)簡(jiǎn)單例子看看就知道了,
import pysnooper @pysnooper.snoop() def removeDuplicates(nums): """ :type nums: List[int] :rtype: int """ flag = 0 i=1 while i<len(nums): if nums[i]==nums[i-1]: flag+=1 i+=1 if flag>=2: del nums[i-1] i-=1 else: i+=1 flag=0 return len(nums) nums = [1,1,1,2] print(removeDuplicates(nums))
添加裝飾器后,運(yùn)行代碼就會(huì)輸出對(duì)應(yīng)函數(shù)的執(zhí)行數(shù)據(jù)
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 i<len(nums):
13: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 i<len(nums):
13: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 i<len(nums):
13: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 i<len(nums):
13:03:44.991693 line 28 return len(nums)
13:03:44.991693 return 28 return len(nums)
Return value:.. 3
當(dāng)然如果嫌棄這個(gè)直接輸出內(nèi)容還想保存日志記錄的話,這個(gè)裝飾器還幾個(gè)可選參數(shù),例如:
@pysnooper.snoop('log/file.log')
先創(chuàng)建好log目錄,然后將日志輸出到file文件中。
@pysnooper.snoop(prefix='removeDuplicates: ')
給調(diào)試的行加個(gè)前綴名便于辨識(shí)和定位,這個(gè)參數(shù)適用于如果同時(shí)調(diào)試多個(gè)函數(shù)使用,我這里的例子是使用了函數(shù)名稱來作為前綴名,摘抄一點(diǎn)日志記錄如下:
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)
顯示函數(shù)中調(diào)用函數(shù)的snoop行,depth參數(shù)的取值范圍是大于或等于1的正整數(shù),在源碼里有這樣一個(gè)判斷:assert self.depth >= 1,當(dāng)取小于1的值就會(huì)拋異常
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python?Tkinter?Gui運(yùn)行不卡頓(解決多線程解決界面卡死問題)
最近寫的Python代碼不知為何,總是執(zhí)行到一半卡住不動(dòng),所以下面這篇文章主要給大家介紹了關(guān)于Python?Tkinter?Gui運(yùn)行不卡頓,解決多線程解決界面卡死問題的相關(guān)資料,需要的朋友可以參考下2023-02-02Python 拷貝對(duì)象(深拷貝deepcopy與淺拷貝copy)
Python中的對(duì)象之間賦值時(shí)是按引用傳遞的,如果需要拷貝對(duì)象,需要使用標(biāo)準(zhǔn)庫中的copy模塊。2008-09-09python中通過pip安裝庫文件時(shí)出現(xiàn)“EnvironmentError: [WinError 5] 拒絕訪問”的問題
這篇文章主要介紹了python中通過pip安裝庫文件時(shí)出現(xiàn)“EnvironmentError: [WinError 5] 拒絕訪問”的問題,本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧2020-08-08ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析
這篇文章主要介紹了ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08