最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年08月03日 17:13:44   作者:David Beazley  
這篇文章主要介紹了Python 如何調(diào)試程序崩潰錯誤,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

問題

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

解決方案

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

# sample.py

def func(n):
 return n + 10

func('Hello')

運行 python3 -i sample.py 會有類似如下的輸出:

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

如果你看不到上面這樣的,可以在程序崩潰后打開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(比如在某個服務(wù)器上面), 通??梢圆东@異常后自己打印跟蹤信息。例如:

import traceback
import sys

try:
 func(arg)
except:
 print('**** AN ERROR OCCURRED ****')
 traceback.print_exc(file=sys.stderr)

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

>>> 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() 在任何地方手動的啟動調(diào)試器:

import pdb

def func(arg):
 ...
 pdb.set_trace()
 ...

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

討論

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

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

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

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

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

以上就是Python 如何調(diào)試程序崩潰錯誤的詳細(xì)內(nèi)容,更多關(guān)于Python調(diào)試程序崩潰錯誤的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文詳細(xì)聊一聊Python中的下劃線“_”們

    一文詳細(xì)聊一聊Python中的下劃線“_”們

    Python中的下劃線(_)有多種用途,包括特殊方法、內(nèi)部變量、避免關(guān)鍵字沖突、名稱修飾、臨時變量和忽略變量等,這篇文章主要介紹了Python中的一些下劃線“_”們,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 200行python代碼實現(xiàn)2048游戲

    200行python代碼實現(xiàn)2048游戲

    這篇文章主要為大家詳細(xì)介紹了200行Python代碼實現(xiàn)2048游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python3線程池ThreadPoolExecutor處理csv文件數(shù)據(jù)

    python3線程池ThreadPoolExecutor處理csv文件數(shù)據(jù)

    這篇文章主要為大家介紹了python3線程池ThreadPoolExecutor處理csv文件數(shù)據(jù)實現(xiàn)的實例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 解析ROC曲線繪制(python+sklearn+多分類)

    解析ROC曲線繪制(python+sklearn+多分類)

    這篇文章主要介紹了解析ROC曲線繪制(python+sklearn+多分類),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 基于opencv和pillow實現(xiàn)人臉識別系統(tǒng)(附demo)

    基于opencv和pillow實現(xiàn)人臉識別系統(tǒng)(附demo)

    人臉識別就是一個程序能識別給定圖像或視頻中的人臉,本文主要介紹了opencv和pillow實現(xiàn)人臉識別系統(tǒng),本文不涉及分類器、訓(xùn)練識別器等算法原理,感興趣的可以了解一下
    2021-11-11
  • 如何將PySpark導(dǎo)入Python的放實現(xiàn)(2種)

    如何將PySpark導(dǎo)入Python的放實現(xiàn)(2種)

    這篇文章主要介紹了如何將PySpark導(dǎo)入Python的放實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口

    Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口

    本文主要介紹了Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python實現(xiàn)轉(zhuǎn)換圖片背景顏色代碼

    Python實現(xiàn)轉(zhuǎn)換圖片背景顏色代碼

    這篇文章主要介紹了Python實現(xiàn)轉(zhuǎn)換圖片背景顏色代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python?RawString與open文件的newline換行符遇坑解決

    Python?RawString與open文件的newline換行符遇坑解決

    這篇文章主要為大家介紹了Python?RawString與open文件的newline換行符遇坑解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決

    不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決

    這篇文章主要給大家介紹了關(guān)于不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決方法,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09

最新評論

桂平市| 库伦旗| 屯昌县| 四子王旗| 太保市| 济阳县| 榆林市| 肥城市| 滦南县| 历史| 安达市| 台州市| 宜君县| 洛阳市| 兰考县| 临沭县| 海原县| 蓬莱市| 清镇市| 鸡东县| 红河县| 昌邑市| 色达县| 华池县| 瓦房店市| 乐平市| 宁都县| 南雄市| 高州市| 太康县| 佳木斯市| 洪江市| 芦山县| 青阳县| 横山县| 大邑县| 扎兰屯市| 石泉县| 安阳市| 兴义市| 玉溪市|