[英]using the python traceback type
通過在處理異常時調用sys.exc_info()
返回一個 3 元組,其中包含異常類、異常對象和回溯。
sys.exc_info
的文檔也證明了這一點:
此函數返回一個包含三個值的元組,這些值提供有關當前正在處理的異常的信息。 ...返回的值是
(type, value, traceback)
。 ... traceback獲取一個 traceback 對象(參見參考手冊),它封裝了最初發生異常的點的調用堆棧。
我想使用用於在上述exc_info
返回值中創建第三個變量的類型回溯,但找不到它的定義位置。
因此,我的問題是,可用於 python 腳本的traceback
類型在哪里?
編輯:
我想使用traceback
類型來定義 PyQt信號。 PyQt 信號是通過指定信號名稱和傳遞的參數類型來定義的。 我並不需要創建一個類型的對象,只有在類似的方式使用它isinstance
調用。
壞消息,即使您可以像這樣獲得回溯對象的類:
import sys
try:
raise Exception
except:
tb = sys.exc_info()[2]
print(tb.__class__)
結果:
<class 'traceback'>
當你嘗試:
tb.__class__()
你得到:
TypeError: cannot create 'traceback' instances
所以回溯類型不能在外部實例化,可能是因為你需要訪問 python 內部來這樣做(並且屬性是只讀的,即使是tb_lineno
所以也不可能“重用”一個實例)
您可以使用traceback.format_exc()
或sys.exc_info()
像:
try:
raise TypeError("Error !?!")
except Exception:
print(traceback.format_exc())
# or
print(sys.exc_info()[2])
我看到標簽包含python2.7
,問題很舊,所以很抱歉再次提出這個問題,但只想說在現代 Python 中,TracebackType 現在位於types
模塊中:
>>> isinstance(sys.exc_info()[2], types.TracebackType))
True
雖然看起來類本身認為它有一個不同的名字:
>>> repr(sys.exc_info()[2].__class__)
<class 'traceback'>
真正有趣的是,雖然不是問題的主題,但對其中一個答案的解釋是,現在可以(自 Python 3.7 起)手動構建回溯。 這對於在異常中准確反映報告的回溯具有有趣的意義,並且與延遲/延遲/異步異常特別相關。 更改本身來自https://github.com/python/cpython/pull/4793 - 盡管如此,我還沒有看到任何好的文檔/示例。 請隨時對此類文章(或其他真正關心此問題的 StackOverflow 問題)發表評論。
這應該在 C 代碼中定義:
包含/traceback.h
#ifndef Py_LIMITED_API
typedef struct _traceback {
PyObject_HEAD
struct _traceback *tb_next;
struct _frame *tb_frame;
int tb_lasti;
int tb_lineno;
} PyTracebackObject;
#endif
嗯..事實上,我不太確定你想做什么,所以不能幫助更多..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.