调试Python代码
一般來說,我們不會在代碼里包含錯誤(嘻嘻),但為了極少數可能遭遇不幸的朋友,這里介紹現實世界里的Python程序員調試代碼時候常用的一些策略:
-
什么也不做
我這么講并不是說Python程序員不需要調試自己的代碼,但是,當你在一個Python程序中犯錯的時候,會得到一條非常有用且容易讀懂的出錯消息(如果你已經有了一些錯誤的話)。如果你已經了解Python,特別是如果你已經熟悉自己的代碼了,那么這么做就通常夠了——閱讀出錯消息,并修改標記的行和文件。對于很多人來說,這就是Python里的調試。但是,對于你沒有編寫過的大型系統來說,這并不總是理想的做法。 -
插入print語句
可能Python的程序員調試自己的代碼的主要方式(以及我調試Python程序的方式)這就是插入print語句并再次運行。由于Python在修改后立即運行,這通常是獲取比錯誤信息所提供的更多信息的一種快捷方式。print語句不必很復雜,一條“I’m here”或變量值的提示,通常就能夠提供你所需的足夠信息,只是別忘了,在發布你的代碼之前,刪除掉或者注釋掉(如在前面添加#)用來調試的print。 -
使用IDE GUI調試器
對于你沒有編寫過較大的系統,以及對于那些想要更詳細地追蹤代碼地初學者,大多數Python開發GUI都有某種指向點擊調試器,IDLE也有一個調試器,但它在實際過程中并不常用,可能是因為它沒有命令行,或者可能是因為添加print語句通常比設置一個GUI調試會話要快。要了解更多的內容,查閱IDLE的幫助,或者直接自己嘗試。其他的IDE(如Eclipse、NetBeans、Komodo和WingIDE)也都是提供了高級的指向點擊調試器。 -
使用pdb命令行調試器
為了實現最終控制,Python附帶了一個名為pdb的源代碼調試器,可以作為Python的標準庫中的一個模塊使用。在pdb中,我們輸入命令來一行一行的步進執行,顯示變量,設置和清除斷點,繼續執行到一個斷點或錯誤。你可以通過導入交互式地啟動pdb,或者作為一個頂層腳本啟動。不管采用哪種方式,我們可以輸入命令來控制會話,他都提供了強大的調試工具。pdb還包含了一個postmortem函數(pdb.pm()),可以在異常發生后執行它,從而獲取發生錯誤的信息。 -
使用Python的-i命令行參數
除了添加打印或在pdb下運行外,你仍然能夠看見是什么出了錯。如果你從命令行運行腳本,并在Python和腳本名稱之間傳遞了-i參數(即python -i m.py),當你的腳本退出時,Python就會進入到它的交互解釋器模式(>>>提示符),無論他是成功地結束還是產生錯誤。此時此刻,你可以打印變量的最終值來獲得關于代碼中所發生的更多細節,因為他們處于頂層的命名空間。甚至這之后你還可以導入和運行pdb調試器以了解更多的相關背景;如果腳本運行失敗,它的算后檢查模式將允許你檢查最新的錯誤。 -
其他選項
如果有更具體的調試需求,你可以在開源領域找到其它的工具,包括支持多線程程序、嵌入式代碼和進程附件的工具。例如,Winpdb系統是一個獨立的調試器,具有高級的調試支持、跨平臺的GUI和控制臺界面。
隨著我們開始編寫較大的腳本,這些選項將變得更加重要。然而,關于調試最好的消息可能時在Python中檢測出并報告錯誤,而不是默默地傳遞錯誤或最終倒是系統崩潰。實際上,錯誤本身是一種定義良好的機制,成為異常,我們可以捕獲并處理它們。當然犯錯并不好玩,但是正如某人回憶到,當進行調試意味著最終得出一個十六進制計算器和仔細鉆研成堆的內存轉儲輸出的時候:有了Python的調試器支持,所犯的錯誤不會像沒有調試器的情況下那樣的令人痛苦不堪。
總結
以上是生活随笔為你收集整理的调试Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JNative用法注意事项
- 下一篇: char、varchar、nchar、n