Comment puis-je écrire un bloc try
/ except
qui intercepte toutes les exceptions?
python
exception-handling
user469652
la source
la source
sys.stderr
et éventuellement enregistrés. Il s'agit d'une exception parfaitement valable et courante.try: whatever() except Exception as e: exp_capture()
:?Réponses:
Vous pouvez mais vous ne devriez probablement pas:
Cependant, cela entraînera également des exceptions comme
KeyboardInterrupt
et vous ne le souhaitez généralement pas, n'est-ce pas? Sauf si vous relancez l'exception immédiatement - voir l'exemple suivant dans la documentation :la source
except Exception:
le nu, sauf que vous y trouverez également les exceptions BaseException.Mis à part une simple
except:
clause (que d'autres ont dit que vous ne devriez pas utiliser), vous pouvez simplement attraperException
:Vous ne devriez normalement envisager de le faire au niveau le plus externe de votre code que si, par exemple, vous vouliez gérer des exceptions non détectées avant de terminer.
L'avantage de
except Exception
la mise à nuexcept
est qu'il y a quelques exceptions qu'il n'attrapera pas, le plus évidemmentKeyboardInterrupt
etSystemExit
: si vous les attrapez et les avalez, vous pouvez rendre difficile la sortie de votre script.la source
Exception
. Notez qu'il est impossible deint
déclencher une exception, et tenter de le faire déclenche uneTypeError
exception, ce qui serait intercepté par laexcept Exception
clause englobante dans un tel cas. D'un autre côté, une classe à l'ancienne peut être élevée et qualifiée de "non-exception" qui ne fait pas partie de la sousException
- classe - elle sera interceptée par uneexcept
clause nue mais pas par uneexcept Exception
clause.TypeError
sys.exit()
signifie généralement que vous vous attendez à ce que l'application se termine, mais si vous interceptez SystemExit, cela ne se fera pas. De même, si vous appuyez sur Ctrl-C sur un script en cours d'exécution (Ctrl-break sur Windows), vous vous attendez à ce que le programme s'arrête, ne capture pas l'erreur et continue. Mais vous pouvez intercepter l'un ou les deux si vous souhaitez effectuer un nettoyage avant d'exister.Vous pouvez le faire pour gérer les exceptions générales
la source
Pour intercepter toutes les exceptions possibles, interceptez
BaseException
. C'est au-dessus de la hiérarchie des exceptions:Python 3: https://docs.python.org/3.5/library/exceptions.html#exception-hierarchy
Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
Mais comme d'autres personnes l'ont mentionné, vous n'en auriez généralement pas besoin, uniquement pour des cas spécifiques.
la source
Exemple très simple, similaire à celui trouvé ici:
http://docs.python.org/tutorial/errors.html#defining-clean-up-actions
Si vous essayez d'attraper TOUTES les exceptions, placez tout votre code dans l'instruction "try:", à la place de "print". Exécution d'une action qui peut lever une exception. "".
Dans l'exemple ci-dessus, vous verriez la sortie dans cet ordre:
1) Effectuer une action qui peut déclencher une exception.
2) Enfin, est appelé directement après l'exécution de l'instruction try, qu'une exception soit levée ou non.
3) "Une exception a été levée!" ou "Tout a l'air génial!" selon qu'une exception a été levée.
J'espère que cela t'aides!
la source
Il existe plusieurs façons de le faire en particulier avec Python 3.0 et supérieur
Approche 1
C'est une approche simple mais non recommandée car vous ne savez pas exactement quelle ligne de code lève réellement l'exception:
Approche 2
Cette approche est recommandée car elle fournit plus de détails sur chaque exception. Il comprend:
Le seul inconvénient est que tracback doit être importé.
la source
Je viens de découvrir cette petite astuce pour tester si les noms d'exception dans Python 2.7. Parfois, j'ai géré des exceptions spécifiques dans le code, j'ai donc eu besoin d'un test pour voir si ce nom se trouve dans une liste d'exceptions gérées.
la source
Il convient de mentionner qu'il ne s'agit pas d'un codage Python approprié. Cela entraînera également de nombreuses erreurs que vous ne voudrez peut-être pas détecter.
la source