2017-07-26 10 views
1
import sys 

try: 
    raise Exception('foobar') 
except: 
    info = sys.exc_info() 

print(type(e[2])) # <class 'traceback'> 
help(traceback) # NameError: name 'traceback' is not defined 

Pythonが例外レポートのために使用するトレースバックオブジェクトの種類は正確に何ですか?Pythonのトレースバックオブジェクトの種類は何ですか?

sys.exc_infoのドキュメントでは、トレースバックインスタンスを操作する方法について豊富な情報がありましたが、型(クラス)自体にアクセスできるようにしたいと考えています。

+0

'__name__ == 'traceback''は、グローバル名前空間では' traceback'がそのクラスを参照しているわけではありません。 –

+0

あなたはこのタイプで何をする予定ですか?型オブジェクトにアクセスすると、あまり得意になりません。 – user2357112

+0

あなたはすでに 'type(e [2])'で型にアクセスしています。 – user2357112

答えて

4

tracebackオブジェクトは、タイプモジュールの下に存在するTracebackTypeのインスタンスです。

types.TracebackType

ようsys.exc_info()[2]に見られるようtracebackオブジェクトのタイプ。 pointed out by @user2357112として

>>> from types import TracebackType  
>>> isinstance(info[2], TracebackType) 
True  
>>> TracebackType 
<class 'traceback'> 

TracebackTypeは、基本的に内部tracebackタイプのエイリアスであり、タイプのモジュールでset by raising an exceptionあります。実際のtraceback typeはCPythonコードで見つけることができます。

+1

これは型の「真の」名前ではなく、「真の」名前はなく、型が定義されている場所ではないことに注意してください。 'types.py'はトレースバックを取得するための例外を送出し、' TracebackType = type(tb) 'を設定します。 – user2357112

+0

@ user2357112更新しました。 –