5

Python: Как игнорировать исключение и продолжать выполнение?

10

У меня есть блок try...except в коде, и когда возникает исключение, я просто хочу продолжить выполнение программы, поскольку в этом случае всё остальное работает нормально. Проблема в том, что если оставить блок except: пустым или использовать #do nothing, возникает синтаксическая ошибка. Я не могу использовать continue, так как это не в цикле. Есть ли какое-то ключевое слово, которое можно использовать, чтобы указать коду просто продолжать выполнение?

3 ответ(ов)

3

Общее

Стандартным эквивалентом "nop" в Python является команда pass:

try:
    do_something()
except Exception:
    pass

Использование except Exception вместо общего except позволяет избежать перехвата исключений, таких как SystemExit, KeyboardInterrupt и т.д.

Python 2

В Python 2 последняя брошенная ошибка запоминается, в результате чего некоторые объекты, участвующие в процессе возбуждения исключения, остаются в активном состоянии бесконечно (фактически, до следующего исключения). Если это имеет для вас значение и (как правило) вам не нужно запоминать последнее брошенное исключение, вы можете использовать следующий код вместо pass:

try:
    do_something()
except Exception:
    sys.exc_clear()

Это очистит последнее брошенное исключение.

Python 3

В Python 3 переменная, содержащая экземпляр исключения, удаляется при выходе из блока except. Даже если переменная имела значение ранее, после входа и выхода из блока except она снова становится неопределенной.

3

В Python 3.4 появился новый способ обработки исключений:

from contextlib import suppress

with suppress(Exception):
    # ваш код

Вот коммит, который добавил эту функциональность: http://hg.python.org/cpython/rev/406b47c64480.

А вот автор, Реймонд Хеттингер, рассказывает об этом и других интересных новшествах в Python (релевантная часть начинается на 43:30): http://www.youtube.com/watch?v=OSGv2VnC0go.

Если вам нужно эмулировать простое ключевое слово except и также игнорировать такие исключения, как KeyboardInterrupt — хотя это обычно не рекомендуется — вы можете использовать with suppress(BaseException).

П.С. Похоже, что ignored было переименовано в suppress перед выпуском 3.4.

0

Попробуйте сделать так:

try:
    blah()
except:
    pass

При использовании конструкции try...except, вы пытаетесь выполнить функцию blah(). Если возникает исключение, оно игнорируется благодаря инструкции pass, и выполнение программы продолжается. Однако будьте осторожны, так как перехват всех исключений без обработки может скрыть ошибки, что затрудняет отладку. Лучше указывать конкретные исключения, которые вы ожидаете. Например:

try:
    blah()
except SomeSpecificException:
    pass

Это поможет вам избежать потенциальных проблем и сделает ваш код более надежным.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь