无效。检查Brian anwser。
好吧,我刚刚才:
for x in Exception("test") :
print x
....:
....:
test
不要打扰;-)
无论如何,这是很好的了解。
编辑:期待的意见,我觉得像添加一些解释。
例外包含您实例化过程中传递的消息:
raise Exception("test")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: test
公平地说,消息是什么定义异常最好的,所以STR()返回它:
print Exception("test")
test
现在,在异常情况以外的情况下,异常被隐式转换为字符串。
所以,当我做的:
for x in Exception("test") :
print x
我遍历字符串 “测试”。
当我做:
for x in Exception() :
print x
我遍历一个空字符串。棘手。因为当涉及到我的问题:
try :
thing.merge(ExceptionLikeObject)
except TypeError :
...
这不会引发任何事情,因为ExceptionLikeObject被视为一个字符串。
现在,我们知道如何,但我仍然不是为什么。也许内置的Exception继承自内建的String?因为据我所知:
- 加入str不会使任何对象迭代。
- 我绕过这个问题,因为overloding iter,使它引发TypeError!
不再是问题,但仍然是一个谜。
其实它不是把它当作一个字符串,它是把它当作参数元组。即list(Exception(“test”))== [“test”],而不是[“t”,“e”,“s”,“t”]。同样列表(Exception(1,2))== [1,2]。有关这可能是为什么的猜测,请参阅下面的答案。 – Brian 2008-11-03 15:22:53