breakpoint()是Python3.7中新引入的一個內(nèi)置函數(shù),其主要作用是在開發(fā)Python程序時,在使用breakpoint()函數(shù)的地方進(jìn)入程序調(diào)試器,以便跟蹤觀察程序的運(yùn)行情況。
調(diào)試Python程序是一件令人頭疼的事情,在使用Python 3.7之前,開發(fā)者為調(diào)試程序不得不首先引入pdb包,然后調(diào)用pdb.set_trace()函數(shù)來跟蹤調(diào)試程序。但如果你準(zhǔn)備使用其它調(diào)試器,如web-pdb,你就不得不把與PDB模塊有關(guān)的代碼移除掉,然后添加web_pdb.set_trace()方法。這使得為調(diào)試Python程序,不得不花費(fèi)更大的精力和開銷,使得Python程序難以維護(hù)和調(diào)試。
Python3.7引入的breakpoint()方法可以使我們編寫松耦合調(diào)試代碼。該函數(shù)自動調(diào)用sys.breakpointhook()函數(shù),直接傳遞相關(guān)參數(shù)。默認(rèn)情況下,sys.breakpointhook()函數(shù)內(nèi)部調(diào)用pdb.set_trace()方法而不需要參數(shù)。這種情況下下,該函數(shù)自動引入pdb包,而無需用戶顯示的引入pdb包。但用戶可以將sys.breakpointhook()設(shè)置為其它函數(shù),breakpoint()函數(shù)將自動調(diào)用用戶設(shè)置的函數(shù),而進(jìn)入用戶所選擇的調(diào)試器。
breakpoint(*args, **kws)
參數(shù)
*args:位置參數(shù),不定長參數(shù)
**kws:關(guān)鍵字參數(shù),不定長參數(shù)。
該函數(shù)將在當(dāng)前位置進(jìn)入到程序到程序調(diào)試器,而無需返回值。
該函數(shù)參數(shù)使用錯誤可能會引發(fā)TypeError錯誤。
下面例子展示 breakpoint()函數(shù)使用方法。
lst = []
for i in range(10):
lst.append(i)
if i == 5:
#開始跟蹤調(diào)試
breakpoint()
print(lst)
上面的例子演示的是向列表lst中追加數(shù)據(jù)。當(dāng)循環(huán)計數(shù)i為5時,執(zhí)行breakpoint()函數(shù)進(jìn)入到調(diào)試器中。
整個調(diào)試過程如下圖所示:
進(jìn)入pdb調(diào)試過程后,首先鍵入 'p lst',將lst的當(dāng)前值輸出來,命令符'p'的作用是輸出某個對象(如變量lst)的值。然后鍵入命令'n'然后回車進(jìn)入到下一個代碼執(zhí)行中。命令符'c'的作用是繼續(xù)執(zhí)行程序直到遇到下一個breakpoint()。
因?yàn)樵摮绦蛑挥挟?dāng)i == 5時才會遇到breakpoint(),所以鍵入'c'后程序直接執(zhí)行到最后,并輸出了lst中的全部元素。
這篇文章介紹了breakpoint()函數(shù)的使用方法。如果在編寫程序中遇到無法觀察到的問題時,在可能出現(xiàn)問題的地方使用breakpoint()函數(shù),使程序運(yùn)行時進(jìn)入到pdb程序調(diào)試模塊以跟蹤程序的執(zhí)行情況。關(guān)于Python的調(diào)試問題,本站將在今后的文章中繼續(xù)給予詳細(xì)的介紹。
|
新聞熱點(diǎn)
疑難解答
圖片精選