En python2.6
supongo, que están esperando el bloque finally para ser atado con el bloque "tratar", donde se eleva la excepción "B". El bloque finally se adjunta al primer bloque "try".
Si ha añadido un bloque de excepción en el bloque try interior, entonces el bloque provocará finalmente excepción B.
try:
raise Exception("a")
except:
try:
raise Exception("b")
except:
pass
finally:
raise
Salida:
Traceback (most recent call last):
File "test.py", line 5, in <module>
raise Exception("b")
Exception: b
Otra variación que se explica qué está sucediendo aquí
try:
raise Exception("a")
except:
try:
raise Exception("b")
except:
raise
Salida:
Traceback (most recent call last):
File "test.py", line 7, in <module>
raise Exception("b")
Exception: b
Si usted ve aquí, en sustitución del bloque finally con excepción plantea la excepción B.
Python 3.1 plantea ambos. – kennytm
Ah. Debería haber mencionado que estoy en Python 2.6. – wilhelmtell
Simplemente por curiosidad: el compilador C# en la misma combinación dice "Error: no se permite una instrucción throw sin argumentos en una cláusula finally que está anidada dentro de la cláusula catch más cercana" (throw == raise, catch == except). ¡Sin ambigüedad! – Andrey