沒想到代碼還能這麼調試,這麼多年 Python 白玩了

關於代碼調試的技巧,我以前寫過不少的文章,加起來也有 將近 10 篇了,關注比較早的同窗,也應該都有看過。html

還沒看過的同窗,歡迎前往查閱:第九章:調試技巧python

其中有一篇是關於 pdb 的調試技巧的:markdown

裏面介紹了兩種 pdb 的調試入口,也是大部分所熟知的。函數

這裏再帶你們回顧一下工具

第一種:指定 -m pdb 來開啓oop

$ python -m pdb pdb_demo.py
複製代碼

第二種:使用 pdb.set_trace() 在代碼中設置斷點學習

import pdb

pdb.set_trace()
複製代碼

但其實,pdb 還另外兩種調試方法,第一種方法,可能有 99% 的開發者都沒用過,甚至連見過都沒有。ui

這兩種方法,是配合 Python Console 的交互界面來實現的。spa

首先我準備好一個名爲 utils.py 的 Python文件,裏面定義了一個 sum 的工具函數(僅做演示用)。調試

def sum(*args):
    result = 0
    for arg in args:
        result += arg

    return result
複製代碼

而後在終端敲入 Python 進入 Console 的模式,導入這個模塊,並調用 sum 函數,在正常狀況下,函數能夠正常工做。

>>> import utils
>>> utils.sum(1,2,3)
6
複製代碼

但若是你的參數類型傳成了 str,函數就會報錯啦~

>>> utils.sum(1,2,"3")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/MING/utils.py", line 4, in sum
    result += arg
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
複製代碼

因爲這裏的報錯是我刻意觸發的,從報錯來看,是很容易定位的。

可是在實際應用中,不免會遇到一些沒法從報錯信息直接判斷 bug 所在的狀況。

這個時候,若是能夠在報錯後,切換到 pdb 的調試模式就行了~

事實上,pdb 是支持這種用法的。

只要你在當前的會話中,導入 pdb,再執行 pdb.pm(),就能夠切換到熟悉的 pdb 調試界面,並在拋錯的地方打上斷點,而後你就能夠任意的查看運行時的變量信息。

若是你不是想等報錯了再調試,而是一開始就想進入調試模式,可使用 pdb.runcall() 函數

有的同窗可能還會想到 pdb.run()pdb.runeval() 這兩個函數,但這兩種方法,是須要提早在函數調試斷點的,這就比較麻煩了,通常狀況下不推薦使用。

綜上所述, pdb 調試方法主要有六種:

  1. python -m pdb:運行 python 文件時直接進入調試模式
  2. pdb.set_trace():事先設置斷點,而後直接運行 python 文件
  3. pdb.run():事先設置斷點,而後直接運行 python 模塊
  4. pdb.runeval():事先設置斷點,而後直接運行 python 模塊(與 pdb.run 相似)
  5. pdb.pm():在 Console 模式下出錯後直接切換到調試模式,並定位到報錯位置。
  6. pdb.runcall():能夠在不設置斷點的狀況下,直接調試代碼片斷。

其中,pdb.pm() 是本文的重點,他雖然冷門,但卻很好用,推薦給你們。

以上就是我今天的分享,但願對你有用,若是你也有好用的調試小技巧,歡迎留言分享,互相學習。


文章最後給你們介紹三個我本身寫的在線文檔:

第一個文檔PyCharm 中文指南 1.0 文檔

花了兩個多月的時間,整理了 100 個 PyCharm 的使用技巧,爲了讓新手可以直接上手,我花了不少的時間錄製了上百張 GIF 動圖,有興趣的前往在線文檔閱讀。

第二個文檔PyCharm 黑魔法指南 1.0 文檔

系統收錄各類 Python 冷門知識,Python Shell 的多樣玩法,使人瘋狂的 Python 炫技操做,Python 的超詳細進階知識解讀,很是實用的 Python 開發技巧等。

第三個文檔Python 中文指南 1.0 文檔

花了三個月時間寫的一本 適合零基礎入門 Python 的全中文教程,搭配大量的代碼案例,讓初學者對 代碼的運做效果有一個直觀感覺,教程既有深度又有廣度,每篇文章都會標內容的難度,是基礎仍是進階的,可供讀者進行選擇,是一本可貴的 Python 中文電子教程。

相關文章
相關標籤/搜索