Dans certains cas, je dois lever mon exception car les exceptions intégrées ne sont pas adaptées à mes programmes. Après avoir défini mon exception, python lève à la fois mon exception et mon exception intégrée, comment gérer cette situation? Je veux seulement imprimer le mien?
Traceback (most recent call last): File "new.py", line 10, in <module> int(age) MyException: invalid literal for int() with base 10: 'merry_christmas'
La sortie:
Traceback (most recent call last): File "new.py", line 10, in <module> int(age) ValueError: invalid literal for int() with base 10: 'merry_christmas' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "new.py", line 12, in <module> raise MyExceptions('age should be an integer, not str.') __main__.MyExceptions: age should be an integer, not str.
Je veux imprimer quelque chose comme ceci:
class MyExceptions(ValueError): """Custom exception.""" pass try: int(age) except ValueError: raise MyExceptions('age should be an integer, not str.')
3 Réponses :
Ajoutez à partir de Aucun
lors de la levée de votre exception personnalisée:
raise MyExceptions('age should be an integer, not str.') from None
Voir PEP 409 - Suppression du contexte d'exception pour plus d'informations.
Merci pour une explication supplémentaire.
Essayez de changer rise MyExceptions ('age should be an integer, not str.')
en rise MyExceptions ('age should be an integer, not str.') from None code>
Vous pouvez supprimer le contexte d'exception et transmettre le message de ValueError
à votre exception personnalisée:
try: int(age) except ValueError as e: raise MyException(str(e)) from None # raise MyException(e) from None # works as well
Possibilité de duplication de Comment déclarer des exceptions personnalisées dans Python moderne? < / a>
@ tk421 Cela ne semble pas être un double de cette question.