鍍金池/ 教程/ Python/ 調(diào)試(Debugging)
<code>open</code>函數(shù)
Python 2系列版本
可迭代對象(Iterable)
異常
在函數(shù)中嵌入裝飾器
你的第一個裝飾器
上下文管理器(Context managers)
<code>set</code>(集合)數(shù)據(jù)結(jié)構(gòu)
裝飾器類
字典推導(dǎo)式(<code>dict</code> comprehensions)
<code>Reduce</code>
捐贈名單
<code>Filter</code>
<code>try/else</code>從句
*args 的用法
<code>dir</code>
處理異常
<code>else</code>從句
對象自省
For - Else
18. 一行式
Python 3.2及以后版本
Global和Return
基于類的實現(xiàn)
容器(<code>Collections</code>)
23. 協(xié)程
推薦閱讀
譯者后記
<code>*args</code> 和 <code>**kwargs</code>
**kwargs 的用法
生成器(Generators)
迭代(Iteration)
基于生成器的實現(xiàn)
將函數(shù)作為參數(shù)傳給另一個函數(shù)
日志(Logging)
三元運(yùn)算符
<code>inspect</code>模塊
枚舉
Map,F(xiàn)ilter 和 Reduce
各種推導(dǎo)式(comprehensions)
從函數(shù)中返回函數(shù)
列表推導(dǎo)式(<code>list</code> comprehensions)
處理多個異常
帶參數(shù)的裝飾器
對象變動(Mutation)
22. 目標(biāo)Python2+3
迭代器(Iterator)
虛擬環(huán)境(virtualenv)
<code>__slots__</code>魔法
什么時候使用它們?
Python/C API
<code>Map</code>
SWIG
授權(quán)(Authorization)
裝飾器
一切皆對象
使用C擴(kuò)展
使用 <code>*args</code> 和 <code>**kwargs</code> 來調(diào)用函數(shù)
17. <code>lambda</code>表達(dá)式
集合推導(dǎo)式(<code>set</code> comprehensions)
<code>type</code>和<code>id</code>
在函數(shù)中定義函數(shù)
<code>finally</code>從句
CTypes
調(diào)試(Debugging)
使用場景
生成器(Generators)
多個return值
關(guān)于原作者
函數(shù)緩存 (Function caching)
Python進(jìn)階

調(diào)試(Debugging)

利用好調(diào)試,能大大提高你捕捉代碼Bug的。大部分新人忽略了Python debugger(pdb)的重要性。 在這個章節(jié)我只會告訴你一些重要的命令,你可以從官方文檔中學(xué)習(xí)到更多。

譯者注,參考:https://docs.python.org/2/library/pdb.html Or https://docs.python.org/3/library/pdb.html

從命令行運(yùn)行

你可以在命令行使用Python debugger運(yùn)行一個腳本, 舉個例子:

$ python -m pdb my_script.py

這會觸發(fā)debugger在腳本第一行指令處停止執(zhí)行。這在腳本很短時會很有幫助。你可以通過(Pdb)模式接著查看變量信息,并且逐行調(diào)試。

從腳本內(nèi)部運(yùn)行

同時,你也可以在腳本內(nèi)部設(shè)置斷點,這樣就可以在某些特定點查看變量信息和各種執(zhí)行時信息了。這里將使用pdb.set_trace()方法來實現(xiàn)。舉個例子:

import pdb

def make_bread():
    pdb.set_trace()
    return "I don't have time"

print(make_bread())

試下保存上面的腳本后運(yùn)行之。你會在運(yùn)行時馬上進(jìn)入debugger模式?,F(xiàn)在是時候了解下debugger模式下的一些命令了。

命令列表:
  • c: 繼續(xù)執(zhí)行
  • w: 顯示當(dāng)前正在執(zhí)行的代碼行的上下文信息
  • a: 打印當(dāng)前函數(shù)的參數(shù)列表
  • s: 執(zhí)行當(dāng)前代碼行,并停在第一個能停的地方(相當(dāng)于單步進(jìn)入)
  • n: 繼續(xù)執(zhí)行到當(dāng)前函數(shù)的下一行,或者當(dāng)前行直接返回(單步跳過)

單步跳過(next)和單步進(jìn)入(step)的區(qū)別在于, 單步進(jìn)入會進(jìn)入當(dāng)前行調(diào)用的函數(shù)內(nèi)部并停在里面, 而單步跳過會(幾乎)全速執(zhí)行完當(dāng)前行調(diào)用的函數(shù),并停在當(dāng)前函數(shù)的下一行。

pdb真的是一個很方便的功能,上面僅列舉少量用法,更多的命令強(qiáng)烈推薦你去看官方文檔。

上一篇:關(guān)于原作者下一篇:捐贈名單