GitHub 熱門:別再用 print 輸出來除錯程式碼了

Python開發者發表於2019-04-24

(給Python開發者加星標,提升Python技能


原創整理:Python開發者(id:PythonCoder)

4 月 23 日,GitHub 每日趨勢榜第一位是一個 Python 相關專案:PySnooper。


640?wx_fmt=jpeg


該專案很快獲取 2200 Star。


PySnooper 是個什麼東西?

640?wx_fmt=jpeg


如果你寫的 Python 程式碼不能按如期那樣執行,你會絞盡腦汁想為啥出錯了。雖然你希望有支援斷點的成熟偵錯程式,但或許你現在不想去設定這樣的偵錯程式。


你想知道哪些行程式碼是正常執行,哪些行不正常。據說大多數人會在可疑位置使用 print 輸出語句。


其實 PySnooper 的作用有點類似,你不用小心謹慎地用 print 輸出語句,只需在想除錯的函式中個裝飾器。然後得到函式的詳細日誌,包括執行了哪些行、何時執行,以及何時更改了區域性變數。


為什麼 PySnooper 能從其他智慧除錯工具中脫穎而出?


因為你可以在不需要進行任何設定的情況下將其用於糟糕的、龐大的企業程式碼庫中。只需開啟裝飾器(如下示例所示),並將輸出重定向到一個專用的日誌檔案,將日誌檔案路徑指定為第一個引數。


使用範例


範例是一個把數字轉成二進位制的函式。

import pysnooper
@pysnooper.snoop()def number_to_bits(number): if number: bits = [] while number: number, remainder = divmod(number, 2) bits.insert(0, remainder) return bits else: return [0]
number_to_bits(6)


輸出範例

Starting var:.. number = 621:14:32.099769 call         3 @pysnooper.snoop()21:14:32.099769 line         5     if number:21:14:32.099769 line         6         bits = []New var:....... bits = []21:14:32.099769 line         7         while number:21:14:32.099769 line         8             number, remainder = divmod(number, 2)New var:....... remainder = 0Modified var:.. number = 321:14:32.099769 line         9             bits.insert(0, remainder)Modified var:.. bits = [0]21:14:32.099769 line         7         while number:21:14:32.099769 line         8             number, remainder = divmod(number, 2)Modified var:.. number = 1Modified var:.. remainder = 121:14:32.099769 line         9             bits.insert(0, remainder)Modified var:.. bits = [1, 0]21:14:32.099769 line         7         while number:21:14:32.099769 line         8             number, remainder = divmod(number, 2)Modified var:.. number = 021:14:32.099769 line         9             bits.insert(0, remainder)Modified var:.. bits = [1, 1, 0]21:14:32.099769 line         7         while number:21:14:32.099769 line        10         return bits21:14:32.099769 return      10         return bits


有興趣的童鞋,請收藏:

https://github.com/cool-RR/PySnooper


推薦閱讀

(點選標題可跳轉閱讀)

GitHub 熱門:微軟新開源的 Python 靜態型別檢查器

GitHub 熱門:各大網站的 Python 爬蟲登入彙總

GitHub 熱門:機器學習 100 天(中文版)


覺得本文對你有幫助?請分享給更多人

關注「Python開發者」加星標,提升Python技能

640?wx_fmt=png

好文章,我在看❤️

相關文章