【发布时间】:2013-09-26 03:41:28
【问题描述】:
这是closest answer,我可以在捕获多个异常时找到(正确的方法),在默许奇迹之后,解释器允许以下 sn-p:
try:
x = "5" + 3
except NameError and TypeError as e:
print e
docs 也会提供这个 sn-p,但与前者不同:
... except (RuntimeError, TypeError, NameError):
... pass
所以最好有第二个意见,但我的问题真的归结为:
- 我怎样才能不仅打印消息,而且在打印语句的开头插入引发的错误的确切类型。例如,我希望第一个 sn-p 通过打印来响应:
TypeError: cannot concatenate 'str' and 'int' objects
鉴于解释器仅将 args 和 message 列为 NameError 的成员,我觉得这可能是不可能的,或者是容易的,但也许这根本不完整。
我自己试过这个,但它不再排除错误(我可能误解了 isinstance):
try:
x = "5" + 3
except (NameError, TypeError) as e:
if isinstance(e, NameError):
print "NameError: " + e
elif isinstance(e, TypeError):
print "TypeError: " + e
else:
print e
【问题讨论】:
-
type(e).__name__?不过,这可能不是最好的方法。 -
@minitech 真是天才,但我仍然不知道为什么我的最后一个 sn-p 失败了。我似乎误解了我在做什么。
-
它失败了,因为你不能轻易地连接一个带有异常的字符串。
-
另一方面,
print "NameError:", e?
标签: python exception python-2.7 exception-handling