web-dev-qa-db-ja.com

Pythonでキャッチされた例外の名前を取得する方法は?

Pythonで発生した例外の名前を取得するにはどうすればよいですか?

例えば。、

try:
    foo = bar
except Exception as exception:
    name_of_exception = ???
    assert name_of_exception == 'NameError'
    print "Failed with exception [%s]" % name_of_exception

たとえば、複数の(またはすべての)例外をキャッチしており、エラーメッセージに例外の名前を出力したい。

97
Rob Bednark

例外の名前を取得する2つの異なる方法を次に示します。

  1. type(exception).__name__
  2. exception.__class__.__name__

例えば。、

try:
    foo = bar
except Exception as exception:
    assert type(exception).__== 'NameError'
    assert exception.__class__.__== 'NameError'
175
user1234

これは機能しますが、より簡単で、より直接的な方法が必要なようです。

try:
    foo = bar
except Exception as exception:
    assert repr(exception) == '''NameError("name 'bar' is not defined",)'''
    name = repr(exception).split('(')[0]
    assert name == 'NameError'
4
Rob Bednark

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
1
moshfiqur