Python 是否可以捕获多种类型的异常,然后打印发生的确切类型?
这是我在捕获多个异常(正确的方法)时所能找到的,在奇迹般的默许之后,解释器允许以下代码片段:Python 是否可以捕获多种类型的异常,然后打印发生的确切类型?,python,exception,python-2.7,exception-handling,Python,Exception,Python 2.7,Exception Handling,这是我在捕获多个异常(正确的方法)时所能找到的,在奇迹般的默许之后,解释器允许以下代码片段: try: x = "5" + 3 except NameError and TypeError as e: print e 也将提供此代码段,但与前者不同: ... except (RuntimeError, TypeError, NameError): ... pass 所以,有第二种意见是很好的,但我的问题实际上归结为: 如何不仅打印消息,而且在print语句的开头插入
try:
x = "5" + 3
except NameError and TypeError as e:
print e
也将提供此代码段,但与前者不同:
... except (RuntimeError, TypeError, NameError):
... pass
所以,有第二种意见是很好的,但我的问题实际上归结为:
- 如何不仅打印消息,而且在print语句的开头插入引发的错误的确切类型。例如,我希望第一个代码段通过打印来响应:
TypeError:无法连接'str'和'int'对象
args
和message
作为namererror
的成员,但这可能是不完整的
我自己也尝试过,但不再排除错误(我可能会误解isinstance):
您的问题是,您正试图在一个字符串中包含这样一个异常
>>> 'foo' + TypeError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'type' objects
>“foo”+类型错误
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:无法连接“str”和“type”对象
最简单的解决方法:
>>> 'foo' + str(TypeError)
"foo<type 'exceptions.TypeError'>"
>>>
>'foo'+str(TypeError)
“福”
>>>
您可以单独捕获错误。有关更多示例,请参见此链接:
如下所示:
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
既然minitech已经向您展示了做您想做的事情的最佳方法(
打印类型(e)。\uuuu name\uuuuuuuu
),我就介绍一下您做错了什么
如果e=namererror(“坏,坏,坏!”)
,则print e
给出坏,坏,坏代码>
但是,“我的字符串”+e
无效,因为e
不是字符串。使用打印“我的字符串”、e
、打印“我的字符串”+str(e)
或打印“我的字符串”{}。格式(e)
。其他人已经很好地回答了你的第二个问题,因此我将回答你的第一个问题:
except NameError and TypeError as e:
与以下内容完全相同:
except TypeError as e:
它不会捕获namererror
。为什么?因为namererror
是真实的,所以和
计算并返回其第二个参数TypeError
。尝试:
print NameError and TypeError
是的,except
子句中的异常与任何其他表达式一样在运行时进行计算。事实上,Python甚至不要求它们是异常(但是,如果它们不是,它们将永远不会捕获任何内容,因为raise
确实需要异常……好吧,您可以使用字符串,但它们已被弃用)
因此,必须提供要捕获的异常的元组:
except (TypeError, ValueError) as e:
Python可能会接受其他形式作为有效语法,但可能不会像您预期的那样工作。键入(e)。\uuuu name\uuuu
?这可能不是最好的方法,虽然。@minitech这是天才,但我仍然不知道为什么我的最后一个片段失败了。我似乎误解了我正在做的事情。它失败了,因为你不能很容易地找到一个异常字符串。另一方面,print“NameError:,e
?谢谢你的解释,因为print e
是可以接受的,我认为它是一个字符串!就我而言,这不是一件明智的事情。为什么一个异常会突然变成一个字符串?奇怪的想法!“在Python 1.5之前,标准异常是作为字符串实现的。”(!)来源:核心Python编程,第二版;韦斯利·J·春;普伦蒂斯大厅,2007年;第10.5章:*例外情况为字符串。添加感叹号。;)
except (TypeError, ValueError) as e: