国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美视频免费在线 | 亚洲在线第一页 | 午夜在线电影 | 天天爱天天操 | 欧洲免费视频 | 国产人成精品一区二区三 | 午夜影院网站 | 人人射av | 婷婷久久综合九色综合绿巨人 | 午夜在线观看 | 精品视频国产 | 91在线中文| 精品一区二区三区四区 | 久久精品影视 | 日韩精品在线观看中文字幕 | 久久成人精品 | 日韩精品一区二区三区四区五区 | 欧美一级二级视频 | 日韩一级视频 | 欧美伊人 | 黄色视屏在线免费观看 | www九九热| 亚洲福利 | 99精品视频在线观看 | 亚洲综合欧美 | 亚洲天堂2020 | 久久精品青青大伊人av | 黄在线观看| av片免费 | 亚洲精品久久久 | 懂色中文一区二区在线播放 | av在线中文 | 国产91久久久 | 色在线免费 | 夜夜操av | 成人日韩 | 精品一区二区三区视频 | 国产精品久久久久国产a级 成人a在线视频 | 国产精品一二三 | 亚洲一区中文字幕 | 日韩一区二区三区在线看 |