激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python 如何調試程序崩潰錯誤

Python 如何調試程序崩潰錯誤

2020-08-04 00:20David Beazley Python

這篇文章主要介紹了Python 如何調試程序崩潰錯誤,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

問題

你的程序崩潰后該怎樣去調試它?

解決方案

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

?
1
2
3
4
5
6
# sample.py
 
def func(n):
  return n + 10
 
func('Hello')

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

?
1
2
3
4
5
6
7
8
9
10
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的調試器。例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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
>>>

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

?
1
2
3
4
5
6
7
8
import traceback
import sys
 
try:
  func(arg)
except:
  print('**** AN ERROR OCCURRED ****')
  traceback.print_exc(file=sys.stderr)

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> 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() 在任何地方手動的啟動調試器:

?
1
2
3
4
5
6
import pdb
 
def func(arg):
  ...
  pdb.set_trace()
  ...

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

討論

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

調試器的一個常見用法是觀測某個已經崩潰的函數中的變量。 知道怎樣在函數崩潰后進入調試器是一個很有用的技能。

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

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

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

以上就是Python 如何調試程序崩潰錯誤的詳細內容,更多關于Python調試程序崩潰錯誤的資料請關注服務器之家其它相關文章!

原文鏈接:https://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p12_debugging_basic_program_crashes.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩经典在线 | 婷婷一区二区三区 | 日本a级一区 | 国产色视频免费 | 日本a v免费观看 | 黄wwww| 天堂精品久久 | lutube成人福利在线观看 | 亚洲一区在线视频观看 | 欧美中文日韩 | 欧美黄色大片免费观看 | 欧美爱爱一区二区 | 草草久| av电影在线观看网站 | 国产精品成年片在线观看, 激情小说另类 | 国产精品久久久久久久久久10秀 | 澳门一级淫片免费视频 | 久久av喷吹av高潮av懂色 | 三级xxxx | av噜噜在线 | 久久久精品网 | 性感美女一级毛片 | 麻豆传传媒久久久爱 | 成人免费网站在线观看 | 在线免费亚洲 | 亚洲成人在线免费观看 | 精品一区二区三区日本 | av在线直播观看 | 黄色片网站免费看 | 国产精品久久久久久久久岛 | 91 免费看片 | 91短视频在线视频 | 巨根插入| 免费观看又色又爽又黄的崩锅 | 亚洲aⅴ免费在线观看 | 538在线精品 | 日本中文字幕久久 | 精品黑人一区二区三区国语馆 | 日本成人午夜视频 | 免费一区在线 | 国产精品自拍av |