isinstance (SystemExit (1), exception) code> Evals to true, mais cet extrait d'impression
"attrapé par nage sauf SystemExit (1,)" code>.
try:
sys.exit(0)
except Exception, e:
print 'caught by except Exception', str(e)
except:
print 'caught by bare except', repr(sys.exc_info()[1])
3 Réponses :
Votre erreur est dans la première phrase de votre question: systemexit code> n'est pas une sous-classe de
exception code>. p> p>
Merci, j'ai trouvé l'erreur réelle, est dans Python 2.3, isinstance (SystemExit (1), exception) code> est vrai. Et avec Python 2.3, le code de test imprime
"capturé par exception" code>. Pour Python 2.6, c'est correct.
SystemExit est une "exception de sortie du système" (par définition) et ne dérive donc pas de SystemExit code> dérive de Busseexception directement plutôt que de l'exception . p>
exception code> est le parent "Tous intégré , exceptions de sortie non-système " p>
exception code>. Dans votre exemple, si vous avez utilisé
BASSEEEXception code>, cela fonctionnerait selon vos hypothèses d'origine. P>
E.g. Voir plus d'infos http: //docs.python .org / version / 2.6.6 / Bibliothèque / Exceptions.HTML # Exception-hiérarchie P> isinstance (systemexit (1), exception) code>
est faux sur python 2.6. La hiérarchie des exceptions dans cette version de Python a été modifiée depuis Python 2.4. p>
KeyboardInterrupt code> n'est pas la sous-classe de
Exception code> plus. P>
Pep 352 fournit la justification: python.org/dev/peps / Pep-0352 / # EXCEPTION-Hiérarchie-modifications
Oh, et generatorexit ont ensuite été déplacés vers 2,6 pour hériter directement de BaseException, car il s'agit d'une exception "System-sortant" dans certains styles de programmation basée sur les générateurs.
Avez-vous vérifié votre déclaration "
isinstance (SystemExit (1), exception) CODE> Evals à True" sur Python 2.6?