如何获取异常的完整路径名,以便我可以添加异常处理程序

时间:2013-12-17 19:46:33

标签: python exception-handling

我想捕捉异常,但我不知道它的完全限定名称。我想通过实验来弄清楚,而不是通过文档挖掘。

假设我的代码看起来像这样

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.,以便我可以为该异常添加处理程序?

1 个答案:

答案 0 :(得分:4)

您可以从__module__属性中获取大多数类(包括Python定义的异常)中的模块:

print type(e).__module__, type(e).__name__

在Python 3.3及更高版本中,您还可以使用qualified name

print(type(e).__module__, type(e).__qualname__)

获取对象的更详细名称(模块中的路径)。对于顶级类,这不会产生任何影响,但对于嵌套对象,限定名称更有趣。