Как я могу получить имя исключения, возникшего в Python?
например,
try:
foo = bar
except Exception as exception:
name_of_exception = ???
assert name_of_exception == 'NameError'
print "Failed with exception [%s]" % name_of_exception
Например, я перехватываю несколько (или все) исключений и хочу напечатать имя исключения в сообщении об ошибке.
python
exception
exception-handling
Роб Беднарк
источник
источник
except NameError:
)?traceback
модуль стандартной библиотеки , в котором есть функции, которые делают хорошее форматирование исключений и трассировки.except
оператором, но запись в журнале очень похожа в каждом случае.Ответы:
Вот несколько разных способов получить имя класса исключения:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
например,
источник
Это работает, но кажется, что должен быть более простой и прямой способ?
источник
except Exception as exception
с типом исключения вы хотите поймать, то естьexcept NameError as exception
.Вы также можете использовать
sys.exc_info()
.exc_info()
возвращает 3 значения: тип, значение, трассировка. В документации: https://docs.python.org/3/library/sys.html#sys.exc_infoисточник
Если вам нужно полное имя класса (например,
sqlalchemy.exc.IntegrityError
вместо простогоIntegrityError
), вы можете использовать приведенную ниже функцию, которую я взял из потрясающего ответа MB на другой вопрос (я просто переименовал некоторые переменные по своему вкусу):Пример:
источник
Другие ответы здесь отлично подходят для исследовательских целей, но если основная цель - зарегистрировать исключение (включая имя исключения), возможно, рассмотрите возможность использования logging.exception вместо print?
источник