使用這些庫和工具像英雄一樣調試 Python
已發表: 2022-06-26你想成為真正的 Python 調試專家嗎? 使用我們將很快介紹的這些令人驚嘆的 Python 調試工具和庫來調試您的 Python 代碼!
Python 是一種通用的、高級的、面向對象的編程語言,用於許多開發目的。 此外,它還是適用於不同應用程序的有效開發工具,從 Web 應用程序開發到 Web 抓取以及更複雜的應用程序(如機器學習和數據科學)。
在開發過程中,很容易出現被稱為編程錯誤的錯誤。 開發人員採取幾個步驟來檢測和消除代碼中現有的和潛在的錯誤。 因此,您可以防止程序代碼崩潰。 我們將此過程稱為調試。
本文將介紹您可以使用的幾個可用的 Python 調試器。 我們還將看到這些調試器彼此之間有多麼不同,以及是什麼使它們的實現有效。
cProfiler 調試庫
cProfiler 是一個流行的庫和一個執行長時間運行代碼分析的 C 擴展。 從長遠來看,它會識別需要很長時間才能運行的程序代碼部分。 儘管它確定了運行代碼不同部分的準確時間,但它並不能完全識別或修復代碼中的錯誤。
因此,需要使用其他調試器。
幸運的是,您可以使用推薦的庫(如 ipdb、Django-debug-toolbar、pyelftools、viztracer 和 py-spy)作為 Python 代碼的調試工具。
ipdb調試工具
完全啟用 IPython 的 Python 調試器是包含 pdb 功能的交互式第三方調試器。 Ipbd 還帶有交互式 shell IPython 支持。 這種支持包括製表符補全、顏色支持和魔術功能,以及其他支持功能。
此調試器通過導出相關函數啟用對 IPython 調試器的訪問。 它還提供了一個類似的接口來更好地進行自省,就像在 pdb 模塊中一樣。
使用 Ipdb 進行調試
該庫需要使用下面的 pip 命令安裝。
pip install ipdb
使用 ipdb 的示例如下所示:
import ipdb alpha_list = ['a', 'b', 'c'] fruit_list = ['orange', 'mango', 'kiwi'] def nested_loop(): for fruit_list: print (fruit) ipdb.set_trace() for x in alpha_list: print(x) if __name__ == '__main__': nested_loop()
使用以下命令運行 python 文件,其中 test.py 是我的文件名:
python -m ipdb test.py
ipdb 導入和運行ipdb.set_trace()
函數允許程序的開始並通過執行運行調試器。
ipdb.pm()
函數(事後分析)的作用類似於%debug
魔術函數。
set_trace 參數
將上下文作為參數傳遞給set_trace
以顯示定義的幾行代碼。 此外, set_trace
也接受作為參數的cond
接受布爾值,並在您將cond
設置為true
時啟動 ipdb 接口。
使用配置文件
分別使用主文件夾和項目文件夾中的 idpdb 文件或setup.cfg
文件設置上下文參數。 歡迎您進一步檢查 ipdb 的功能。
Django 調試工具欄
Django 調試工具欄是 Django 中流行的調試工具:一個 Python 框架。
這組可配置的面板顯示當前請求或響應的調試信息。 單擊工具欄時,將顯示有關面板內容的更多詳細信息。
這個工具徹底檢查了 Django 開發環境。
按照此處的安裝過程和配置說明進行操作。
Pyelftools 庫
pyelftools 庫完全基於 Python 構建。 它解析和分析 ELF 文件和 DWARF 調試信息,只需要 Python 即可運行。
使用 Pyelftools 很容易,因為它沒有外部庫。 此外,在不安裝的情況下使用 pyelftools 非常容易,因為它只需要在環境變量中調整PYTHONPATH
。
您將使用以下方式安裝它:
pip install pyelftools
pyelftools 的實現只需要導入它並在您的程序中調用它。
冰淇淋調試工具
這是 Python 開發人員的另一個高效調試工具。
使用 icecream,也就是ic()
,比 print() 有很多好處,如下所述:
- 從字面上看,打字相對較快。
- 它可以很好地打印數據結構。
- 使用
ic()
打印表達式或變量名稱及其值。 - 它突出顯示了輸出的語法。
- 可選地,它包括程序上下文,包括文件名、行號和父函數。
在使用這個包之前,使用下面的 pip 命令安裝它:

pip install icecream
好消息是您可以在所有文件中使用ic()
,而不必通過使用install()
安裝它來將其導入所有文件中。 此外, install()
將ic()
) 添加到內置模塊。 解釋器導入的所有文件都將共享ic()
。
在您可以命名為 x.py 的第一個根 python 文件中,使用install()
添加ic()
) 。
from icecream import install install() from y import mult mult()
在 y.py 文件中導入 x.py 文件,調用 ic()
def mult(): z=8 ic(z)
結果:
y ic| z : 8
使 ic() 更高效的是它能夠檢查傳遞給它的變量,包括它自己,然後打印它的參數和參數值,如下例所示。
from icecream import ic def mult(x): return x * 4 ic(mult(100))
輸出:
ic| mult(100): 400
此外,您可以將 ic() 插入到預先存在的代碼中,因為它返回其參數。 下面的示例返回ic| x: 12
ic| x: 12
,然後ic| y: 48
ic| y: 48
。
from icecream import ic x = 12 def mult(x): return x*4 y = mult(ic(x)) ic(y)
使用 py-spy 工具進行調試
您可以使用 py-spy 作為調試工具來分析 Python 程序的示例。 py-spy 無需重新啟動程序或修改其代碼,即可可視化 Python 程序的執行。 此外,因為它是用 Rust 編寫的,所以開銷很低。
此外,值得考慮的是,對生產 Python 代碼使用 py-spy 是安全的,因為它運行的進程與已分析的 Python 程序不同。
就像我們之前看到的所有其他工具一樣,您可以在安裝後使用 py-spy 工具。
pip install py-spy
儘管您的 Python 程序服務於生產流量,但您仍然可以使用 py-spy 分析和調試該程序,使其成為關鍵的 Python 分析器工具。
Viztracer 調試器
或者,您可以使用調試工具 viztracer 來跟踪和可視化您的 Python 程序執行。 它也是一個具有低開銷日誌記錄的分析工具。
是什麼讓 viztracer 成為有效的調試工具?
- 使用它非常簡單,並且它不依賴於外部包來工作。
- Viztracer 可在所有操作系統平台上運行:Windows、Linux 或 macOS。
- 其強大的前端平滑渲染GB級trace。
- 它使用 RegEx 記錄任意函數和額外信息,如變量和屬性、引發的異常、垃圾收集器操作等,而無需修改源代碼中的任何代碼部分。
- 使 viztracer 成為低開銷調試工具的原因在於它能夠過濾掉程序中不需要的數據。 然後,它會在以 JSON 格式轉儲日誌之前保留舊信息。
- 您可以使用它在程序運行時插入自定義事件,例如即時事件、變量事件和持續時間事件。 這樣,它就像打印調試一樣工作,除了 viztracer 會在您跟踪數據時讓您知道打印發生的時間。
結論
Python 分析和調試就像軟件分析一樣是開發中需要注意的關鍵步驟。 此步驟有助於排除任何有 bug 的代碼段,從而優化代碼的整體性能。
我們上面介紹的調試工具是使 Python 開發人員的工作非常輕鬆的高效工具。
看到其他調試工具比 cProfiler 更有效地工作,您可以像真正的英雄一樣調試您的 Python 代碼並使用這些調試器修復任何潛在的錯誤,以防止您的代碼在不崩潰的情況下運行。
調試愉快!