欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

問題

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

解決方案

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

# 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(比如在某個服務器上面), 通常可以捕獲異常后自己打印跟蹤信息。例如:

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()
 ...

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

討論

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

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

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

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

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

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

相關文章

  • Python爬蟲教程之利用正則表達式匹配網(wǎng)頁內(nèi)容

    Python爬蟲教程之利用正則表達式匹配網(wǎng)頁內(nèi)容

    這篇文章主要給大家介紹了關于Python爬蟲教程之利用正則表達式匹配網(wǎng)頁內(nèi)容的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python+Selenium實現(xiàn)瀏覽器標簽頁的切換

    Python+Selenium實現(xiàn)瀏覽器標簽頁的切換

    在實際工作中,我們經(jīng)常會遇到頁面切換的情況。就比如當點擊了某個功能的按鈕后,瀏覽器出現(xiàn)了新的標簽頁,需要在這些標簽頁之間進行切換。本文將利用Selenium實現(xiàn)這一功能,需要的可以參考一下
    2022-06-06
  • python中找出numpy array數(shù)組的最值及其索引方法

    python中找出numpy array數(shù)組的最值及其索引方法

    下面小編就為大家分享一篇python中找出numpy array數(shù)組的最值及其索引方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python如何讀取csv文件時添加表頭/列名

    Python如何讀取csv文件時添加表頭/列名

    這篇文章主要介紹了Python如何讀取csv文件時添加表頭/列名,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python封裝json格式字符串并處理單雙引號問題

    python封裝json格式字符串并處理單雙引號問題

    大家好,本篇文章主要講的是python封裝json格式字符串并處理單雙引號問題,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 如何搜索查找并解決Django相關的問題

    如何搜索查找并解決Django相關的問題

    每個程序員都會在開發(fā)過程中遇到這樣或那樣的問題, 有時光靠一個人是無法解決所有問題的, 所以我們應該找到適當?shù)牡胤教釂?
    2014-06-06
  • pandas刪除行刪除列增加行增加列的實現(xiàn)

    pandas刪除行刪除列增加行增加列的實現(xiàn)

    這篇文章主要介紹了pandas刪除行刪除列增加行增加列的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 我喜歡你 抖音表白程序python版

    我喜歡你 抖音表白程序python版

    我喜歡你!這篇文章主要為大家詳細介紹了抖音表白程序python版的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 淺談Django2.0 加xadmin踩的坑

    淺談Django2.0 加xadmin踩的坑

    今天小編就為大家分享一篇淺談Django2.0 加xadmin踩的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Django Rest framework認證組件詳細用法

    Django Rest framework認證組件詳細用法

    這篇文章主要介紹了Django Rest framework認證組件詳細用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論