|
|
1
13
请注意,正在发生的事情与任何类型的隐式字符串转换等无关,而是因为
这也让我感到惊讶,但仔细想想,我猜这是出于向后兼容性的原因。Python用于( pre-1.5 )缺少当前异常的类层次结构。相反,抛出了字符串,并(通常)为应传递给处理块的任何细节提供了一个元组参数,即:
这种行为似乎是为了避免破坏1.5之前的代码,期望得到一个参数元组,而不是一个不可迭代的异常对象。有几个这样的例子
字符串异常已经被弃用了一段时间,在Python 3中已经消失了。异常对象在Python 3中不再可迭代:
|
|
2
2
无效。看看布莱恩·安瑟。 好的,我刚刚得到它:
不用麻烦了;-) 不管怎样,很高兴知道。 编辑:看到这些评论,我想补充一些解释。 异常包含您在实例化过程中传递的消息:
公平地说,消息是定义Exception的最佳方式,因此str()返回它:
现在,当在Exception上下文之外的其他上下文中使用时,Exceptions会隐式转换为字符串。 所以当我这样做的时候:
我正在迭代字符串“test”。 当我这样做的时候:
我确实迭代了一个空字符串。很棘手。因为当涉及到我的问题时:
这不会引发任何问题,因为ExceptionLikeObject被视为字符串。 现在,我们知道如何,但我仍然不知道为什么。也许内置的Exception继承自内置的String?因为据我所知:
这已经不是问题了,但仍然是个谜。 |