Python: Как игнорировать исключение и продолжить?
У меня есть попытка... кроме блока в моем коде и когда исключение бросить. Я действительно просто хочу продолжить с кодом, потому что в этом случае все по-прежнему может работать очень хорошо. Проблема в том, что если вы оставите блок исключений пустым или с #do ничего, это даст вам синтаксическую ошибку. Я не могу использовать продолжить, потому что это не в цикле. Есть ли ключевое слово, которое я могу использовать, чтобы код продолжал работать?
4 ответа
Общий ответ
Стандарт "ноп" в 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
блок снова становится неопределенным.
В Python 3.4 появился новый способ сделать это:
from contextlib import suppress
with suppress(Exception):
# your code
Вот коммит, который его добавил: 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.