Pythonで発生した例外の名前を取得するにはどうすればよいですか?
例えば。、
try:
foo = bar
except Exception as exception:
name_of_exception = ???
assert name_of_exception == 'NameError'
print "Failed with exception [%s]" % name_of_exception
たとえば、複数の(またはすべての)例外をキャッチしており、エラーメッセージに例外の名前を出力したい。
例外の名前を取得する2つの異なる方法を次に示します。
type(exception).__name__
exception.__class__.__name__
例えば。、
try:
foo = bar
except Exception as exception:
assert type(exception).__== 'NameError'
assert exception.__class__.__== 'NameError'
これは機能しますが、より簡単で、より直接的な方法が必要なようです。
try:
foo = bar
except Exception as exception:
assert repr(exception) == '''NameError("name 'bar' is not defined",)'''
name = repr(exception).split('(')[0]
assert name == 'NameError'
sys.exc_info()
を使用することもできます。 exc_info()
は、タイプ、値、トレースバックの3つの値を返します。ドキュメント: https://docs.python.org/3/library/sys.html#sys.exc_info
import sys
try:
foo = bar
except Exception:
exc_type, value, traceback = sys.exc_info()
assert exc_type.__== 'NameError'
print "Failed with exception [%s]" % name_of_exception