Leo*_*rdo 4 python exception-handling exception python-2.7
这是最接近的答案我能找到的捕获多个异常(正确的方法),当默认的奇迹解释允许下面的代码片段:
try:
x = "5" + 3
except NameError and TypeError as e:
print e
Run Code Online (Sandbox Code Playgroud)
该文档将提供该片段为好,但没有像前者:
... except (RuntimeError, TypeError, NameError):
... pass
Run Code Online (Sandbox Code Playgroud)
因此,有一个第二意见是很好的,但我的问题实际上归结为:
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
Run Code Online (Sandbox Code Playgroud)
您可以单独捕获错误.有关更多示例,请参阅此链接:http: //docs.python.org/2/tutorial/errors.html#handling-exceptions
类似于以下内容:
try:
x = "5" + 3
except TypeError as e:
print "This is a TypeError"
print e
except NameError as e:
print "This is a NameError"
print e
Run Code Online (Sandbox Code Playgroud)
其他人已经很好地回答了你的第二个问题,所以我将解决你的第一个问题:
except NameError and TypeError as e:
Run Code Online (Sandbox Code Playgroud)
与以下内容完全相同:
except TypeError as e:
Run Code Online (Sandbox Code Playgroud)
它不会抓住NameError.为什么?因为NameError是真实的,所以and评估并返回它的第二个参数,TypeError.尝试:
print NameError and TypeError
Run Code Online (Sandbox Code Playgroud)
是的,except子句中的异常在运行时像任何其他表达式一样进行计算.实际上,Python甚至不要求它们是异常(但是,如果它们不是,它们将永远不会捕获任何东西,因为它们raise需要例外......好吧,你可以使用字符串,但它们已被弃用).
因此,您必须提供要捕获的异常元组:
except (TypeError, ValueError) as e:
Run Code Online (Sandbox Code Playgroud)
Python可以接受其他形式作为有效语法,但可能不会像您期望的那样工作.
小智 1
你的问题是你试图连接一个带有这样的异常的字符串
>>> 'foo' + TypeError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'type' objects
Run Code Online (Sandbox Code Playgroud)
最简单的解决方法:
>>> 'foo' + str(TypeError)
"foo<type 'exceptions.TypeError'>"
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3899 次 |
| 最近记录: |