程式碼除錯的N種姿勢

Python之禪發表於2018-11-15

再牛的程式設計師也沒法一口氣把程式碼全部寫正確,通常做法就是寫一小段然後驗證程式碼正確性,再繼續寫下一段,這樣能保證程式碼不會錯得太離譜。怎麼衡量一小段程式碼呢?在你覺得這段程式碼沒有十足把握的情況下就應該停下來驗證一下。


除錯的本質是確認你認為正確的事情確實是正確的,這次來介紹一下 Python 中除錯程式碼的 N 種姿勢


print


print 函式使用簡單方便,所以開發中我們經常使用它做簡單除錯,來列印某個值是否是否則預期的。 不過 print 也有不足的地方,如果想列印一個複雜物件,或者是很長的字典、列表等複合物件時,列印的結果堆在一行,很不友好,想看下資料的結構還不容易,例如:


640?wx_fmt=png


pprint


好在 Python 內建了另一個列印工具 pprint,全稱叫 pretty printer,顧名思義就是加了美顏效果的列印工具,在列印複雜的物件時,以可讀的格式輸出,當然你還可以自己指定縮排和行的最大寬度,這在遇到複雜物件時非常有幫助,例如:


640?wx_fmt=png


prettyprinter


人類對美的追求是沒有終點的,雖然 pprint 已經夠用了,但是總有人覺得它還不夠美,於是有人就在此基礎上搞出一個更強大的列印工具叫 prettyprinter, 這是個第三方工具,需要額外安裝。你可以看到時間物件更可讀,不過我有感覺有點冗餘,在Linux環境下還可以變色。專案地址:https://github.com/tommikaikkonen/prettyprinter/tree/master/prettyprinter


640?wx_fmt=png

logging


在開發過程中使用 print 除錯程式碼方便又簡單,但上線前一定要把這些冗餘程式碼去掉,否則還會影響效能。那麼線上某些關鍵位置想跟蹤怎麼辦,這時 logging 的作用就發揮出來了。很多時候在測試環境不會出現的異常放正式環境就出現了,因為你要面對的各種臨界條件,使用 logging 的好處不言而喻,可以設定不同的日誌級別,例如 debug、info、error 等級別,你還可以將日誌持久化,方便後續做日誌追蹤。


PDB


PBD 是 Python 的內建模組,是一個真正用於程式碼除錯的,因為你可以在程式碼執行的時候設定斷點、單步除錯、進入函式除錯、檢視當前程式碼、檢視棧片段、動態改變變數的值等。PDB 在早期還沒有整合開發工具IDE的時候,非常有用(現在也使用),只需要一個命令:


python -m pdb test.py


就可以進入除錯模組,不喜歡用 IDE 的同學可以考慮使用。


PyCharm


但是現在有更先進的開發工具了,像 PyCharm、PyDev 這樣的工具都支援程式碼除錯、打斷點、動態修改變數值等等,不僅如此,PyCharm 還支援遠端除錯。在 Bug 隱藏比較深的情況下,我們有時就會祭上這樣的大殺器。


你還有那些好用的神技能,歡迎留言分享

640?

相關文章