Python Glossary English

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

else в try-except

обработка

Блок else выполняется, только если в try не возникло исключения. Отделяет «счастливый путь» от обработки ошибок.

Синтаксис

try:
    ...
except Error:
    ...
else:
    # только при успехе

Смысл else не в красоте, а в сужении зоны риска: строки, переехавшие из try в else, этим except уже не перехватываются, иначе ValueError из «продолжения работы» тихо уйдёт в ветку, написанную про разбор числа. else без хотя бы одного except — синтаксическая ошибка, а порядок такой: try, затем else и только потом finally. Если из try вышли через return, break или continue, else не выполнится вовсе.

Примеры

try:
    result = int('42')
except ValueError:
    print('error')
else:
    print(f'success: {result}')  # → success: 42
def safe_open(path):
    try:
        f = open(path)
    except FileNotFoundError:
        return None
    else:
        with f:
            return f.read()
print(safe_open('/нет/такого/файла'))  # → None
# else + finally
try:
    x = 10 / 2
except ZeroDivisionError:
    print('zero division')
else:
    print(f'result: {x}')  # → result: 5.0
finally:
    print('done')  # → done
import json
def parse(s):
    try:
        data = json.loads(s)
    except json.JSONDecodeError:
        print('invalid JSON')
    else:
        return data
print(parse('{"a": 1}'))  # → {'a': 1}
print(parse('{'))  # → invalid JSON, затем None
# В else — только код, который НЕ должен ловиться этим except
try:
    n = int('5')
except ValueError:
    print('not a number')
else:
    print(n * 2)  # → 10

См. также

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