НЕ ДЕЙСТВИТЕЛЬНО. Проверьте Брайана.
Хорошо, я только что получил:
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
Я перебираю строку "test".
И когда я это сделаю:
for x in Exception() :
print x
Я перебираю пустую строку. Tricky. Потому что, когда дело доходит до моей проблемы:
try :
thing.merge(ExceptionLikeObject)
except TypeError :
...
Это ничего не вызовет, так как ExceptionLikeObject рассматривается как строка.
Хорошо, теперь мы знаем, КАК, но я все еще не ПОЧЕМУ. Может быть, встроенное исключение наследуется от встроенного String? Потому что, насколько я знаю:
- добавление str не делает объект повторяемым.
- Я обошел проблему, перегрузив iter , сделав так, что он поднял ошибку TypeError!
Больше не проблема, но остается загадкой.