国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python 如何調(diào)試程序崩潰錯(cuò)誤

瀏覽:78日期:2022-07-15 10:54:53

問(wèn)題

你的程序崩潰后該怎樣去調(diào)試它?

解決方案

如果你的程序因?yàn)槟硞€(gè)異常而崩潰,運(yùn)行 python3 -i someprogram.py 可執(zhí)行簡(jiǎn)單的調(diào)試。 -i 選項(xiàng)可讓程序結(jié)束后打開(kāi)一個(gè)交互式shell。 然后你就能查看環(huán)境,例如,假設(shè)你有下面的代碼:

# sample.pydef func(n): return n + 10func(’Hello’)

運(yùn)行 python3 -i sample.py 會(huì)有類似如下的輸出:

bash % python3 -i sample.pyTraceback (most recent call last): File 'sample.py', line 6, in <module> func(’Hello’) File 'sample.py', line 4, in func return n + 10TypeError: Can’t convert ’int’ object to str implicitly>>> func(10)20>>>

如果你看不到上面這樣的,可以在程序崩潰后打開(kāi)Python的調(diào)試器。例如:

>>> import pdb>>> pdb.pm()> sample.py(4)func()-> return n + 10(Pdb) w sample.py(6)<module>()-> func(’Hello’)> sample.py(4)func()-> return n + 10(Pdb) print n’Hello’(Pdb) q>>>

如果你的代碼所在的環(huán)境很難獲取交互shell(比如在某個(gè)服務(wù)器上面), 通常可以捕獲異常后自己打印跟蹤信息。例如:

import tracebackimport systry: func(arg)except: print(’**** AN ERROR OCCURRED ****’) traceback.print_exc(file=sys.stderr)

要是你的程序沒(méi)有崩潰,而只是產(chǎn)生了一些你看不懂的結(jié)果, 你在感興趣的地方插入一下 print() 語(yǔ)句也是個(gè)不錯(cuò)的選擇。 不過(guò),要是你打算這樣做,有一些小技巧可以幫助你。 首先,traceback.print_stack() 函數(shù)會(huì)你程序運(yùn)行到那個(gè)點(diǎn)的時(shí)候創(chuàng)建一個(gè)跟蹤棧。例如:

>>> def sample(n):... if n > 0:... sample(n-1)... else:... traceback.print_stack(file=sys.stderr)...>>> sample(5) File '<stdin>', line 1, in <module> File '<stdin>', line 3, in sample File '<stdin>', line 3, in sample File '<stdin>', line 3, in sample File '<stdin>', line 3, in sample File '<stdin>', line 3, in sample File '<stdin>', line 5, in sample>>>

另外,你還可以像下面這樣使用 pdb.set_trace() 在任何地方手動(dòng)的啟動(dòng)調(diào)試器:

import pdbdef func(arg): ... pdb.set_trace() ...

當(dāng)程序比較大而你想調(diào)試控制流程以及函數(shù)參數(shù)的時(shí)候這個(gè)就比較有用了。 例如,一旦調(diào)試器開(kāi)始運(yùn)行,你就能夠使用 print 來(lái)觀測(cè)變量值或敲擊某個(gè)命令比如 w 來(lái)獲取追蹤信息。

討論

不要將調(diào)試弄的過(guò)于復(fù)雜化。一些簡(jiǎn)單的錯(cuò)誤只需要觀察程序堆棧信息就能知道了, 實(shí)際的錯(cuò)誤一般是堆棧的最后一行。 你在開(kāi)發(fā)的時(shí)候,也可以在你需要調(diào)試的地方插入一下 print() 函數(shù)來(lái)診斷信息(只需要最后發(fā)布的時(shí)候刪除這些打印語(yǔ)句即可)。

調(diào)試器的一個(gè)常見(jiàn)用法是觀測(cè)某個(gè)已經(jīng)崩潰的函數(shù)中的變量。 知道怎樣在函數(shù)崩潰后進(jìn)入調(diào)試器是一個(gè)很有用的技能。

當(dāng)你想解剖一個(gè)非常復(fù)雜的程序,底層的控制邏輯你不是很清楚的時(shí)候, 插入 pdb.set_trace() 這樣的語(yǔ)句就很有用了。

實(shí)際上,程序會(huì)一直運(yùn)行到碰到 set_trace() 語(yǔ)句位置,然后立馬進(jìn)入調(diào)試器。 然后你就可以做更多的事了。

如果你使用IDE來(lái)做Python開(kāi)發(fā),通常IDE都會(huì)提供自己的調(diào)試器來(lái)替代pdb。 更多這方面的信息可以參考你使用的IDE手冊(cè)。

以上就是Python 如何調(diào)試程序崩潰錯(cuò)誤的詳細(xì)內(nèi)容,更多關(guān)于Python調(diào)試程序崩潰錯(cuò)誤的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产成人ay手机在线观看 | 亚洲欧美综合视频 | 免费一区二区三区视频狠狠 | 免费看黄色三级毛片 | 国产精品免费精品自在线观看 | 亚洲网站黄色 | 久久夜视频 | 韩国欧洲一级毛片免费 | 免费人成黄页网站在线观看 | 香蕉视频黄色在线观看 | 亚洲久久久 | 日本国产欧美色综合 | 国产男女爽爽爽爽爽免费视频 | 久久久久久a亚洲欧洲aⅴ | 中文精品99久久国产 | 天天se天天cao综合网蜜芽 | 香蕉久久夜色精品国产2020 | 91久久精品国产91性色tv | 美女国产福利视频 | 狠狠色丁香久久婷婷综合_中 | 精品国产午夜久久久久九九 | 精品国产一区二区三区国产馆 | 一级片aaa | 久久99国产亚洲精品 | 91精品国产乱码久久久久久 | 欧美成人精品久久精品 | 日本精品1在线区 | 欧美5g影院天天爽天天看 | 国产成人免费片在线视频观看 | 国产成人美女福利在线观看 | 国产成人精品曰本亚洲78 | 国产精品精品国产 | 国产成人精品高清不卡在线 | 毛片免费高清免费 | 国产亚洲人成网站在线观看 | 色资源二区在线视频 | 国产精品视频永久免费播放 | 亚洲免费一级视频 | 手机看片久久国产免费不卡 | 国产一区二三区 | 美女福利视频国产 |