Ich habe den folgenden Code gefangen ausgeführt:Exception wird zweimal und es wird von einem anderen außer Block
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()
und die Ausgabe von python file1.py
ist die folgende:
I am running
I am running
I am caught
<class 'file1.TestException'>
I am generally caught
<class 'file1.TestException'>
Vor allem warum der Code in diesem Fall zweimal ausgeführt wird? Ich kann verstehen, dass der Import rekursiv ist, aber warum der Code des Skripts erneut ausgeführt wird?
Zweitens, das zweite Mal wird es nicht durch den gleichen except
Block gefangen, obwohl es den gleichen Typ wie das erste Mal ist, für die ich auch keine Erklärung finden kann.
Schließlich versuche ich, eine Problemumgehung für dieses Problem zu finden, ohne etwas zu einer neuen Datei zu verschieben, aber ich scheint es nicht zu sein. Ist es möglich, dieses Problem zu überwinden?
bearbeiten
Für die zweite Frage wurde mir klar, es liegt daran, dass der Code innerhalb der Modulebene ist.
+1 für ein kurzes, vollständiges, eigenständiges Programm, das das vorliegende Problem aufzeigt. Ref: http://Stackoverflow.com/help/mcve und http://SSCCE.org –