我想捕捉异常,但我不知道它的完全限定名称。我想通过实验来弄清楚,而不是通过文档挖掘。
假设我的代码看起来像这样
try:
blackbox()
except Exception,e:
print str(e)
print e.__class__.__name__
它运行,我收到一条说
的异常消息"error: too big"
error
所以我添加了一个处理程序
try:
blackbox()
except error,e:
pass
except Exception,e:
print str(e)
print e.__class__.__name__
但它不起作用,因为error
不在当前命名空间中。 (我知道这个特定问题的答案,恰好是curses.error
)。我如何计算异常对象的命名空间(即curses.
,以便我可以为该异常添加处理程序?
答案 0 :(得分:4)
您可以从__module__
属性中获取大多数类(包括Python定义的异常)中的模块:
print type(e).__module__, type(e).__name__
在Python 3.3及更高版本中,您还可以使用qualified name:
print(type(e).__module__, type(e).__qualname__)
获取对象的更详细名称(模块中的路径)。对于顶级类,这不会产生任何影响,但对于嵌套对象,限定名称更有趣。