avere il codice seguente:eccezione viene eseguito due volte e viene catturato da un diverso blocco except
file1.py
from file2 import tfun
class TestException(Exception):
pass
try:
print 'I am running'
tfun()
except TestException as e:
print 'I am caught'
print type(e)
except Exception as e:
print 'I am generally caught'
print type(e)
file2.py
def tfun():
from file1 import TestException
raise TestException()
e l'output da python file1.py
è il seguente:
I am running
I am running
I am caught
<class 'file1.TestException'>
I am generally caught
<class 'file1.TestException'>
Prima di tutto perché il codice viene eseguito due volte in questo caso? Posso capire che l'importazione è ricorsiva, ma perché il codice dello script viene eseguito nuovamente?
In secondo luogo, la seconda volta che non viene catturato dallo stesso blocco except
anche se è lo stesso tipo della prima volta, che anche io non riesco a trovare una spiegazione per.
Infine, sto cercando di trovare una soluzione per questo problema senza spostare nulla in un nuovo file, ma io non sembra essere nessuno. È possibile superare questo problema?
Modifica
Per la seconda domanda ho capito che è perché il codice si trova all'interno del livello di modulo.
+1 per un programma breve, completo, indipendente che dimostra il problema in questione. Rif: http://stackoverflow.com/help/mcve e http://SSCCE.org –