все 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Сообщить о неточности