以下 5 個函數(shù)對調(diào)試和故障排除代碼很有用。 breakpoint需要暫停代碼的執(zhí)行并進(jìn)入 Python 命令提示符? 這時候你就需要斷點(diǎn) 調(diào)用斷點(diǎn)函數(shù)將使你進(jìn)入 Python 調(diào)試器 pdb,然后來分析代碼中出現(xiàn)的問題。 這個內(nèi)置函數(shù)是在 Python 3.7 中添加的。在舊版本的 Python 上,可以使用 import pdb ;pdb.set_trace() 代替。 dirdir 函數(shù)可用于兩件事: 1、查看所有局部變量的列表 2、查看特定對象的所有屬性列表 在這里我們可以看到我們的局部變量,在啟動一個新的 Python shell 之后,然后在創(chuàng)建一個新變量 x 之后: >>> dir()['__annotations__', '__doc__', '__name__', '__package__']>>> x = [1, 2, 3, 4]>>> dir()['__annotations__', '__doc__', '__name__', '__package__', 'x'] 如果我們將該 x 列表傳遞到 dir 中,我們可以看到它具有的所有屬性:
我們可以看到典型的列表方法、append、pop、remove 等以及許多用于運(yùn)算符重載的方法。 varsvars 函數(shù)是兩個相關(guān)事物的混搭:檢查 locals() 和測試對象的 __dict__ 屬性。 當(dāng)不帶參數(shù)調(diào)用 vars 時,它等效于調(diào)用 locals() 內(nèi)置函數(shù)(顯示所有局部變量及其值的字典)。 >>> vars(){'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>} 當(dāng)使用參數(shù)調(diào)用它時,它會訪問該對象上的 __dict__ 屬性(在許多對象上,它表示所有實(shí)例屬性的字典)。
如果你曾經(jīng)嘗試使用 my_object.__dict__,你可以使用 vars 來代替。 我通常在使用 vars 之前找到 dir。 typetype 函數(shù)將告訴你傳遞給它的對象的類型。 類實(shí)例的類型就是類本身: >>> x = [1, 2, 3]>>> type(x)<class 'list'> 類的類型是它的元類,通常是類型:
如果你曾經(jīng)看到有人使用 __class__,請知道他們可以使用更高級別的類型函數(shù): >>> x.__class__<class 'list'>>>> type(x)<class 'list'> type 函數(shù)有時在實(shí)際代碼中很有用(尤其是具有繼承和自定義字符串表示的面向?qū)ο蟮拇a),但在調(diào)試時也很有用。 但請注意,在進(jìn)行類型檢查時,通常使用 isinstance 函數(shù)而不是 type(還要注意,我們在 Python 中傾向于不進(jìn)行類型檢查,因?yàn)槲覀兏矚g練習(xí)鴨子類型)。 help如果你在交互式 Python shell(我通常稱之為 Python REPL)中,可能使用斷點(diǎn)調(diào)試代碼,并且您想知道某個對象、方法或?qū)傩允侨绾喂ぷ鞯?,那么help()功能就會出現(xiàn) 便利。 |
|