如何获取Python捕获的异常的名称?
如何获取Python中引发的异常的名称 e、 g如何获取Python捕获的异常的名称?,python,exception,Python,Exception,如何获取Python中引发的异常的名称 e、 g 例如,我正在捕获多个(或所有)异常,并希望在错误消息中打印该异常的名称。这是可行的,但似乎必须有一种更简单、更直接的方法 try: foo = bar except Exception as exception: assert repr(exception) == '''NameError("name 'bar' is not defined",)''' name = repr(exception).split('(')[
例如,我正在捕获多个(或所有)异常,并希望在错误消息中打印该异常的名称。这是可行的,但似乎必须有一种更简单、更直接的方法
try:
foo = bar
except Exception as exception:
assert repr(exception) == '''NameError("name 'bar' is not defined",)'''
name = repr(exception).split('(')[0]
assert name == 'NameError'
以下是获取异常类名称的几种不同方法:
类型(例外)。\uuuuu名称\uuuuuu
exception.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
exception.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
您还可以使用
sys.exc\u info()
exc_info()
返回3个值:类型、值、回溯。关于文件:
如果您想要完全限定类名(例如,
sqlalchemy.exc.IntegrityError
,而不仅仅是IntegrityError
),您可以使用下面的函数,这是我从到另一个问题(我刚刚重命名了一些变量以适应我的口味):
例如:
try:
# <do something with sqlalchemy that angers the database>
except sqlalchemy.exc.SQLAlchemyError as e:
print(get_full_class_name(e))
# sqlalchemy.exc.IntegrityError
试试看:
#
除了sqlalchemy.exc.SQLAlchemyError作为e:
打印(获取完整类名称(e))
#sqlalchemy.exc.IntegrityError
这里的其他答案对于探索来说是很好的,但是如果主要目的是记录异常(包括异常的名称),也许考虑使用替代而不是打印?< /P>替换“代码>”,除了异常(异常除外)/代码>,您希望捕获的异常类型,也就是说,
除了NameError作为异常之外
。我不想捕捉预先知道的特定异常。我想抓住所有的例外。你为什么认为你需要这个?为什么不先捕获一个更具体的异常(例如,除了NameError:
)呢?我有几个场景,希望捕获所有异常(或它们的列表),并希望在错误消息中打印出异常的名称。您可能希望签出标准库的模块,它有一些函数可以很好地格式化异常和回溯。@delnan当您测试某个函数是否在programmedI中引发异常时,就会出现这种情况。我需要这样的东西来干涸一些代码:我调用的方法可以引发几个异常,除了
语句外,每个都使用自己的语句进行处理,但在每种情况下,日志条目都非常相似。当您启动raise socket.timeout
时,您只会得到名称:timeout
是否有方法获取回溯(最近的调用最后一次):…
?您是否回答了这个问题?
try:
foo = bar
except Exception as exception:
assert type(exception).__name__ == 'NameError'
assert exception.__class__.__name__ == 'NameError'
assert exception.__class__.__qualname__ == 'NameError'
import sys
try:
foo = bar
except Exception:
exc_type, value, traceback = sys.exc_info()
assert exc_type.__name__ == 'NameError'
print "Failed with exception [%s]" % exc_type.__name__
def get_full_class_name(obj):
module = obj.__class__.__module__
if module is None or module == str.__class__.__module__:
return obj.__class__.__name__
return module + '.' + obj.__class__.__name__
try:
# <do something with sqlalchemy that angers the database>
except sqlalchemy.exc.SQLAlchemyError as e:
print(get_full_class_name(e))
# sqlalchemy.exc.IntegrityError