Конструкция try-except

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы разберем, как делать программы надежными и устойчивыми к ошибкам. Вы узнаете, как использовать блок try-except, чтобы программа не "падала" при некорректных данных, а продолжала работать или корректно сообщала о проблеме.

Мы пройдем путь от простого перехвата ошибок до использования блоков else и finally. Задания помогут вам научиться различать типы исключений (ValueError, ZeroDivisionError и другие) и правильно их обрабатывать. Внимательно читайте условия и обращайте внимание на синтаксис Python — отступы и двоеточия здесь играют ключевую роль.

Список тем

Базовая структура перехвата ошибок

id: 40066_task1

Допишите пропущенные ключевые слова, чтобы код мог безопасно попытаться выполнить деление. Если возникнет ошибка деления на ноль, программа должна вывести сообщение, а не аварийно завершиться.

Заполните пропуски
input1S:
    result = 10 / 0
    print(result)
input2S ZeroDivisionError:
    print("Делить на ноль нельзя!")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Определение типа исключения

id: 40066_task2

Посмотрите на код. Какое именно исключение возникнет при попытке преобразовать строку "hello" в целое число? Выберите правильное название класса ошибки.

Выберите правильный вариант ответа
try:
    number = int("hello")
except Exception as e:
    print(type(e).__name__)
Сообщения
Проверить
Показать подсказку

Исправьте синтаксические ошибки

id: 40066_task3

В этом коде две ошибки. Первая — использование неверного ключевого слова (как в Java или JS), вторая — отсутствие обязательного знака препинания после названия ошибки. Найдите и исправьте строки.

Найдите ошибку и исправьте
try:
    print(x)
catch NameError
    print("Переменная не определена")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставление кода и обработчиков

id: 40066_task4

Расставьте обработчики исключений (`except`) в соответствующие блоки `try`. Вам нужно понять, какой код вызывает какую ошибку: обращение к несуществующему ключу словаря или выход за границы списка.

Нужно правильно расставить в пропуски предложенные варианты
# Блок 1: Работа со списком
try:
    my_list = [1, 2, 3]
    print(my_list[10])
input1S:
    print("Нет такого индекса!")

# Блок 2: Работа со словарем
try:
    my_dict = {"name": "Alice"}
    print(my_dict["age"])
input2S:
    print("Нет такого ключа!")
except IndexError:
except KeyError:
except ValueError:
except SyntaxError:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Классификация причин ошибок

id: 40066_task5

Распределите фрагменты кода по категориям ошибок, которые они вызовут при выполнении. У нас три корзины: математическая ошибка, ошибка типа и ошибка имени переменной.

Перетяните элементы в соответствующие блоки
ZeroDivisionError
TypeError
NameError
val = 10 / 0
print("Age: " + 25)
print(unknown_var)
a = 5 % 0
len(500)
y = x + 1
Сообщения
Проверить
Показать подсказку

Безопасное преобразование ввода

id: 40066_task6

Соберите программу, которая запрашивает возраст пользователя. Если введено не число, программа должна вывести сообщение об ошибке. Используйте блок `else`, чтобы вывести возраст, если ввод был корректным. Будьте внимательны, есть лишние строки с синтаксическими ошибками.

Перетяните в правильном порядке строки из одного блока в другой
try:
    age = int(input("Введите возраст: "))
except ValueError:
    print("Это не число!")
else:
    print(f"Вам {age} лет")
catch ValueError:
    if age:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Блоки try-except-else-finally

id: 40066_task7

Сопоставьте блоки конструкции обработки исключений с их описанием. Вы должны точно понимать, при каких условиях срабатывает каждый блок.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Код, который может вызвать ошибку
Выполняется, если возникло исключение
Выполняется, если исключений НЕ было
Выполняется в любом случае (есть ошибка или нет)
try:
except:
else:
finally:
Сообщения
Проверить
Показать подсказку

Что выведет код с блоком finally?

id: 40066_task8

Проанализируйте код. Мы делим 10 на 2 (ошибки нет). Внимательно посмотрите, что выводится в блоке `else`, а что в `finally`. Запишите полный вывод программы в одну строку через пробел (если выводится несколько слов).

Что должно получиться?
try:
    res = 10 / 2
except ZeroDivisionError:
    print("Error")
else:
    print("OK")
finally:
    print("End")
Сообщения
Проверить
Показать подсказку

Иерархия обработки исключений

id: 40066_task9

Составьте код, который сначала пытается выполнить действие, затем ловит специфичную ошибку (`ValueError`), и только в конце ловит все остальные ошибки (`Exception`). Порядок `except` важен!

Расставьте строки в правильном порядке
try:
    x = int(input())
except ValueError:
    print("Нужно ввести число")
except Exception:
    print("Другая ошибка")
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру