print 函數已經老,DeBug 該靠 PySnooper 了~ 小火伴們,你們都奈何 DeBug Python 代碼?是否是經常使用 print 大法?在本文先容的這個項目中,deBug Python 代碼不再必要 print 了。只需給有疑難的代碼加上裝飾器,種種信息高深莫測,找失足誤也就特別很是簡略了。 這個名為 PySnooper 的項目是剛開源的,僅僅一天就取得了 2K+ 的 Star 量,當然這「一天」還沒收場,這個珍藏量也會持續革新。 項目地址:https://github.com/cool-RR/pysnooper Python 奈何 DeBug? 若是寫著寫著模子,發明模子不 work 了,那末你該奈何找出 Python 的過錯語句?這類過錯一般與語法有關,而是某個變量的運算產生了過錯。接上去咱們就要逐步找哪一個處所有成績了,這里最多見、最直觀的要領便是 print 大法。把咱們嫌疑的變量打印進去,總會找到異樣之處。 若是代碼中嵌入了單位測試,例如 assert 語句,那末還能放大一些嫌疑規模。但平日咱們都要多次測驗考試,打印多個變量才能找到過錯之處。在 PyTorch 或者 Keras 如許的靜態計算圖還好,打印進去的間接是一個值,像 TensorFlow 如許的動態計算圖,打印進去是張量信息而不是值,這就很尷尬了。 現實上不止是機械進修,在咱們寫 Python 的時辰,老是想弄清晰為何寫的代碼在運轉時有點不大對。許多讀者樂于使用斷點等成熟的 DeBug 對象,也有的間接使用 print 大法找過錯之處。但目前咱們不必要憂慮了,本文將先容一個新的開源對象剛塞,它決心信念滿滿地號令到:「不要再使用 print 函數來 DeBug 啦~」 極簡DeBug對象PySnooper 一般環境下,想要曉得哪一行代碼在運轉、ptt 蔡英文哪一行不運轉、內地變量的值是若干時,大部門人會使用 print 函數,在樞紐部門打印某個或者某組變量的值、外形、類型等信息。 而 PySnooper 讓你能疾速地取得這些信息,且相比之下它不必要過細地寫 print 函數,只要要向感愛好的函數增長一個裝飾器就行了。咱們會失去該函數的具體 log,包括哪行代碼能運轉、甚么時辰運轉和內地變質變化切實其實切時間。 相比于其余代碼智能對象,PySnooper 為什么云云良好?由于不必要任何配置,你就可以在下等、不規定的企業代碼庫上使用 PySnooper。只要要加個裝飾器,并為日記輸入地址指定路徑就行了。 如許說可能不太直觀,上面咱們可以詳細望個案例,PySnooper 的良好就能高深莫測。 PySnooper 案例 上面項目作者寫了一個函數以將數值轉換為二進制碼,該函數返歸的是一個二進制列表。上面咱們將裝飾器 @pysnooper.snoop() 加到該函數上,就大功樂成了。
澳網 該函數返歸的日記以下,咱們可以望到在挪用 number_to_bits 函數時,給予參數 number 的初始值為 6。然后,PySnooper 就仍是對著源代碼一行行闡發了。 如上闡發所示,函數每創立一個新變量,那末這個變量的值、這個變量的轉變都邑鋪示進去。并且 PySnooper 還將輪回睜開,是以轉變的細節加倍明確。終極 6 的二進制版本應當是 [1, 1, 0],它的轉變進程也鋪示在 bits 變量中。 目前經由過程這些具體信息,PySnooper 不再用憂慮咱們用 print 函數強行 deBug 了。 PySnooper 具體特性 若是規范過錯輸入難以nba 即時比分取得,或者者太長了,那末可以將輸入定位到內地文件:
查望一些非內地變量的值:
鋪示咱們函數中挪用函數的 snoop 行:
將一切 snoop 行以某個前綴最先,更易定位以及找到:
演示 PySnooper 上面咱們最最先測驗考試使用 PySnooper 獵取 TensorFlow 的信息,若是它能獵取種種張量信息,那可就太強盛了。 起首使用 pip 裝置包:
公然,TensorFlow 這類動態圖并不克不及很好地獵取信息,讀者也可測驗考試一下。前面咱們試了試 NumPy,但愿能獵取整個計算流的信息。以下代碼所示,咱們創立了兩個數組變量,而且 2×2 的矩陣會連乘多次,若是能追蹤到這類連乘,那就比較利益理過錯。
關于 NumPy,該對象確鑿能追蹤一切可疑變量的轉變進程。當然在現實運算中,矩陣乘法的維度會特別很是大,咱們可以間接追蹤外形(Shape),而不是詳細的值。 【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。 |
【線上投注】威力彩 獎金DeBug Python代碼端賴print函數?換用這個一天2K+Star的對象吧
中華隊 ptt