2016-07-06 71 views
1

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

+1

它有一個回溯,否則你會得到一個'AttributeError',但回溯的幀沒有'f_back'。這對我來說似乎非常明智。如果直接運行,*您期望的外框是什麼?* – jonrsharpe

+0

269行標準庫中的traceback.py模塊相同:使用了tb_frame.f_back。 – Heartagramir

+0

這並不能真正回答我的問題。 *爲什麼你認爲會有外框?在這種情況下? – jonrsharpe

回答

2

你看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

+0

以及您的評論更像是解決方案...我的問題是我缺乏幀的知識的結果。現在我更清楚地瞭解幀...我建議編輯您的解決方案,並在其他幀中添加一些關於幀和f_back使用情況的信息。 – Heartagramir

+0

@Heartagramir *「在其他幀中添加一些關於幀和f_back使用情況的信息」*是什麼意思?你有我可以回答的具體問題嗎?什麼不清楚? – jonrsharpe

+0

一切都很清楚,這只是一個建議,再次感謝。 – Heartagramir