sys.exc_info()返回一個元組(類型,值,追溯)。
so sys.exc_info()[2]
是我們的追溯對象。爲什麼exc_traceback返回無
爲什麼它沒有捕獲異常,回溯這段代碼:
import sys
try:
1/0
except ZeroDivisionError:
print sys.exc_info()[2].tb_frame.f_back
tb_frame和f_back使用已經在這裏解釋: Frame Objects
sys.exc_info()返回一個元組(類型,值,追溯)。
so sys.exc_info()[2]
是我們的追溯對象。爲什麼exc_traceback返回無
爲什麼它沒有捕獲異常,回溯這段代碼:
import sys
try:
1/0
except ZeroDivisionError:
print sys.exc_info()[2].tb_frame.f_back
tb_frame和f_back使用已經在這裏解釋: Frame Objects
你看None
因爲沒有外框。您直接執行此操作,所以當前幀是最後一幀。爲了證明這一點,我創建了一個demo.py
:
import sys
try:
1/0
except ZeroDivisionError:
print sys.exc_info()[2].tb_frame.f_back
這看起來應該很熟悉,和一個簡單的caller.py
:
import demo
現在看到的區別:
$ python demo.py
None
$ python caller.py
<frame object at 0x10bc34c20>
在第二種情況下,那裏有一個外框(即caller.py
),你看不到None
。
以及您的評論更像是解決方案...我的問題是我缺乏幀的知識的結果。現在我更清楚地瞭解幀...我建議編輯您的解決方案,並在其他幀中添加一些關於幀和f_back使用情況的信息。 – Heartagramir
@Heartagramir *「在其他幀中添加一些關於幀和f_back使用情況的信息」*是什麼意思?你有我可以回答的具體問題嗎?什麼不清楚? – jonrsharpe
一切都很清楚,這只是一個建議,再次感謝。 – Heartagramir
它有一個回溯,否則你會得到一個'AttributeError',但回溯的幀沒有'f_back'。這對我來說似乎非常明智。如果直接運行,*您期望的外框是什麼?* – jonrsharpe
269行標準庫中的traceback.py模塊相同:使用了tb_frame.f_back。 – Heartagramir
這並不能真正回答我的問題。 *爲什麼你認爲會有外框?在這種情況下? – jonrsharpe