создание исключения в исключении без вызова исходного исключения

Мой код следующий:

try:
    *Do something*
except *anError*:
    if (condition):
        methodCalled()
    else:
        raise "my own Exception"

Проблема в том, что когда я вызываю свое собственное исключение ("мое собственное исключение"), также возникает исключение "anError". Есть ли способ убедиться, что ошибка, которую я поймал, не возникнет, когда я вызову свое собственное исключение?


person ashimashi    schedule 19.01.2015    source источник


Ответы (1)


Цитируя документы:

При возбуждении (или повторном возбуждении) исключения в предложении exclude или finally __context__ автоматически устанавливается на последнее пойманное исключение; если новое исключение не обрабатывается, трассировка, которая в конечном итоге отображается, будет включать в себя исходное исключение (исключения) и окончательное исключение.

Это как раз ваш случай:

try:
    try:
        raise ValueError
    except ValueError:
        raise TypeError
except Exception as e:
    print('Original:', type(e.__context__)) # Original: <class 'ValueError'>
    print('Explicitly raised:', type(e))    # Explicitly raised: <class 'TypeError'>

Есть только одно активное исключение; Я мог бы написать except TypeError вместо except Exception, и результат был бы таким же.

Если вы хотите запретить Python печатать исходное исключение, используйте raise ... from None:

try:
    raise ValueError
except ValueError:
    raise TypeError from None
person vaultah    schedule 19.01.2015