Как повысить мои исключения вместо встроенных исключений? - PullRequest
0 голосов
/ 03 января 2019

В некоторых случаях мне нужно повысить свое исключение, потому что встроенные исключения не подходят для моих программ. После того, как я определил свое исключение, Python вызывает и мое исключение и встроенное исключение, как справиться с этой ситуацией? Я хочу напечатать только мой?

class MyExceptions(ValueError):
    """Custom exception."""
    pass

try:
    int(age)
except ValueError:
    raise MyExceptions('age should be an integer, not str.')

Выход:

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.

Я хочу напечатать что-то вроде этого:

Traceback (most recent call last):
  File "new.py", line 10, in <module>
    int(age)
MyException: invalid literal for int() with base 10: 'merry_christmas'

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Попробуйте изменить raise MyExceptions('age should be an integer, not str.') на raise MyExceptions('age should be an integer, not str.') from None

0 голосов
/ 03 января 2019

Вы можете подавить контекст исключения и передать сообщение из ValueError в пользовательское исключение:

try:
    int(age)
except ValueError as e:
    raise MyException(str(e)) from None
    # raise MyException(e) from None  # works as well
0 голосов
/ 03 января 2019

Добавить from None при повышении вашего пользовательского исключения:

raise MyExceptions('age should be an integer, not str.') from None

См. PEP 409 - Подавление контекста исключения для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...