Si consideri il seguente esempio minimale:Scope per "sollevare" senza argomenti a gestori di eccezioni nidificate in Python 2 e 3
try:
raise Exception('foo')
except Exception:
try:
raise Exception('bar')
except Exception:
pass
raise
L'esecuzione di questo codice con Python 2 solleva bar eccezione, in esecuzione con Python 3 solleva un'eccezione foo . Tuttavia, la documentazione sia per Python 2 e Python 3 afferma che raise
senza espressione aumenterà "l'ultima eccezione che era attiva nell'ambito corrente". Perché l'ambito è diverso in Python 2 e 3? La differenza è documentata ovunque?
È possibile visualizzare le modifiche 2.x vs. 3.x alle eccezioni su https://docs.python.org/3.0/whatsnew/3.0.html#changes-to-exceptions – jonrsharpe
Grazie. Sembra che questo si riferisca alla pulizia implicita dei nomi delle eccezioni dai blocchi introdotti da PEP 3110 https://www.python.org/dev/peps/pep-3110/ e menzionati nella documentazione con una modifica tra 2 e 3: https : //docs.python.org/2/reference/compound_stmts.html#try https://docs.python.org/3/reference/compound_stmts.html#try. Eppure questo è incompleto al meglio, perché afferma che questo si applica solo alle eccezioni assegnate usando "come target". – a3nm
Differenza di comportamento verificata in 2.7.9 e 3.4.3rc1. Puoi sollevare un problema sul tracker (bugs.python.org)? (Se non già uno.) –