Python Glossary English

все Python 3Исключенияконструкция

try / except

обработка

Блок try содержит код, который может вызвать исключение. except перехватывает его. else — если исключения не было. finally — всегда.

Синтаксис

try:
    ...
except ErrorType:
    ...

Ловите конкретный класс: except Exception, а тем более голый except:, заодно проглатывает опечатки вроде NameError и превращает баг в тихо работающую программу; голый except: захватывает ещё и BaseException, то есть KeyboardInterrupt с SystemExit. Порядок веток важен — срабатывает первая подходящая, поэтому except Exception перед except ValueError делает вторую ветку недостижимой. И держите тело try минимальным: чем больше строк под защитой, тем выше шанс перехватить не ту ошибку.

Примеры

try:
    x = 1 / 0
except ZeroDivisionError:
    print('division by zero')  # → division by zero
try:
    int('abc')
except ValueError as e:
    print(e)  # → invalid literal for int() with base 10: 'abc'
# Несколько except: срабатывает первый подходящий
try:
    lst = [1, 2, 3]
    print(lst[10])
except IndexError:
    print('index error')  # → index error
except Exception as e:
    print('other:', e)
# else — если исключений не было
try:
    result = 10 / 2
except ZeroDivisionError:
    print('error')
else:
    print(result)  # → 5.0
# finally — выполняется всегда
try:
    f = open('/nonexistent')
except FileNotFoundError:
    print('not found')  # → not found
finally:
    print('always')  # → always
# Несколько типов в одном except
try:
    x = int(None)
except (TypeError, ValueError) as e:
    print(type(e).__name__)  # → TypeError
# Exception ловит всё, кроме SystemExit, KeyboardInterrupt и GeneratorExit
try:
    raise RuntimeError('oops')
except Exception as e:
    print(type(e).__name__, e)  # → RuntimeError oops

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности