0Pricing
Python Academy · Урок

try / except / else / finally

Структурируйте блоки обработки исключений для любых сценариев.

«try / except / else / finally» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

Конструкции try/except/else/finally в Python дают полный контроль над обработкой ошибок и очисткой ресурсов.

Базовая конструкция try/except

try: risky_code() except ExceptionType: handle() — Python выполняет блок except только при возбуждении исключения указанного типа.
try:
    x = int('abc')
except ValueError:
    print('not a number')

Перехват объекта исключения

except ValueError as e: связывает исключение с переменной e. Используйте str(e) или e.args, чтобы получить сообщение.
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

Перехват нескольких исключений

except (TypeError, ValueError) as e: перехватывает исключение любого из этих типов.
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

Пустой except (избегайте его)

except: (без указания типа) перехватывает EVERYTHING, включая KeyboardInterrupt и SystemExit. Почти всегда это ошибка — всегда указывайте типы.
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

Несколько конструкций except

Можно использовать несколько блоков except, каждый из которых обрабатывает свой тип. Python проверяет их по порядку.
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

Конструкция else

try/except/else: блок else выполняется только в том случае, если исключение НЕ возникло. Используйте его для кода, который должен выполняться при успехе.
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

Конструкция finally

Блок finally выполняется ALWAYS — после успешного try, после except и даже после return или break. Он идеально подходит для очистки ресурсов.
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

finally с return

Если одновременно используются return и finally, сначала выполняется finally, но возвращаемое значение из finally имеет приоритет. Будьте осторожны.
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

Вложенные блоки try

Блоки try можно вкладывать друг в друга. Внутреннее исключение передаётся наружу, если его не перехватил внутренний except.
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

Журналирование исключений

import logging; logging.exception('msg') записывает полную трассировку вызовов в журнал. Это особенно полезно в рабочем коде.
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

Быстрая проверка

Какая конструкция выполняется независимо от того, возникло исключение или нет?

Итоги

try/except перехватывает ошибки. else выполняется при успехе. finally выполняется ALWAYS (для очистки ресурсов). Перехватывайте конкретные типы и избегайте пустого except. Используйте as e для доступа к исключению.

Продолжайте обучение

Отличная работа! Перейдите к следующему уроку, чтобы продолжить обучение.

Часто задаваемые вопросы

Урок «try / except / else / finally» бесплатный?

Да — полный текст урока «try / except / else / finally» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «try / except / else / finally»?

Структурируйте блоки обработки исключений для любых сценариев. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «try / except / else / finally»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Разбор исключений
  2. try / except / else / finally
  3. Вызов и повторный вызов исключений
  4. Пользовательские классы исключений
← Назад к Python Academy