2
votes

Comment lever mes exceptions au lieu d'exceptions intégrées?

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 :



3
votes

Essayez de changer rise MyExceptions ('age should be an integer, not str.') en rise MyExceptions ('age should be an integer, not str.') from None


0 commentaires

0
votes

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


0 commentaires