NO ES VÁLIDO. Revisa a Brian con el guante.
Ok, yo sólo lo consiguió:
for x in Exception("test") :
print x
....:
....:
test
No se moleste ;-)
De todos modos, es bueno saber.
EDIT: mirando a los comentarios, tengo ganas de agregar algunas explicaciones.
Una excepción contiene un mensaje que ha pasado a durante la instanciación:
raise Exception("test")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: test
Es justo decir que el mensaje es lo que define la excepción el mejor, por lo str() devuelve:
print Exception("test")
test
Ahora, sucede que las Excepciones se convierten implícitamente en cadena cuando se usan en algo distinto de un contexto de excepción.
Así que cuando lo haga:
for x in Exception("test") :
print x
estoy interactuando sobre la "prueba" cadena.
Y cuando lo haga:
for x in Exception() :
print x
Yo iterar sobre una cadena vacía. Difícil. Porque cuando se trata de mi problema:
try :
thing.merge(ExceptionLikeObject)
except TypeError :
...
Esto no va a aumentar nada desde ExceptionLikeObject se considera como una cadena.
Bien, ahora sabemos el CÓMO, pero aún no el POR QUÉ. ¿Tal vez la excepción incorporada hereda de la cadena incorporada? Porque por lo que yo sé:
- añadiendo str no hace que cualquier objeto iterable.
- Pasé por alto el problema al sobrecargar iter, lo que aumenta TypeError!
Ya no es un problema, pero sigue siendo un misterio.
Brillant! Thx por la explicación. Me gustaría aceptar la respuesta, pero parece que necesitamos un poco más de votación antes de que se me permita. –