根據(jù)我的閱讀,有兩種方法可以在Python中調(diào)試代碼:使用傳統(tǒng)的調(diào)試器,例如pdb或ipdb。它支持諸如cfor continue,nfor step-over,sforstep-into等命令,但是您沒有直接訪問IPython shell的權(quán)限,這對(duì)于對(duì)象檢查非常有用。使用 IPython的通過嵌入代碼中的一個(gè)IPython的殼。您可以這樣做from IPython import embed,然后embed()在您的代碼中使用。當(dāng)您的程序/腳本命中一條embed()語(yǔ)句時(shí),您將進(jìn)入IPython Shell。這樣就可以使用所有IPython好東西對(duì)對(duì)象進(jìn)行全面檢查并測(cè)試Python代碼。但是,在使用時(shí),embed()您將無法通過便捷的鍵盤快捷鍵逐步完成代碼。有什么辦法可以將兩全其美相結(jié)合?IE能夠 一步一步的通過與得心應(yīng)手的pdb / IPDB鍵盤快捷鍵你的代碼。在任何這樣的步驟(例如,在給定的語(yǔ)句上),都可以訪問成熟的IPython shell。在MATLAB中進(jìn)行IPython調(diào)試:在MATLAB中可以找到這種“增強(qiáng)調(diào)試”類型的示例,在該示例中,用戶始終可以完全訪問MATLAB引擎/外殼,并且她仍可以逐步瀏覽代碼,定義條件斷點(diǎn)等。我已經(jīng)與其他用戶討論過,這是人們從MATLAB遷移到IPython時(shí)最想念的調(diào)試功能。在Emacs和其他編輯器中進(jìn)行IPython調(diào)試:我不想讓這個(gè)問題過于具體,但是我主要在Emacs中工作,所以我想知道是否有任何方法可以將此功能引入其中。理想情況下,Emacs(或編輯器)將允許程序員在代碼上的任意位置設(shè)置斷點(diǎn),并與解釋器或調(diào)試器進(jìn)行通信,以使其在您選擇的位置停止,并在該位置提供完整的IPython解釋器。
3 回答

莫回?zé)o
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
ipdb.set_trace()呢?在您的代碼中:
import ipdb; ipdb.set_trace()
更新:現(xiàn)在在Python 3.7中,我們可以編寫breakpoint()。它的工作原理相同,但也遵守PYTHONBREAKPOINT環(huán)境變量。此功能來自此PEP。
這樣可以對(duì)代碼進(jìn)行全面檢查,并且您可以訪問諸如c(繼續(xù)),n(執(zhí)行下一行),s(進(jìn)入該點(diǎn)的方法)之類的命令。
請(qǐng)參閱ipdb repo和命令列表。IPython現(xiàn)在稱為Jupyter(的一部分)。
ps:請(qǐng)注意,ipdb命令優(yōu)先于python代碼。因此,要寫作,list(foo)您需要print(list(foo))或!list(foo)。
另外,如果您喜歡ipython提示符(它的emacs和vim模式,歷史記錄,完成情況等),由于它基于python提示符工具包,因此很容易為您的項(xiàng)目獲得相同的名稱。
添加回答
舉報(bào)
0/150
提交
取消