🐍 Python  ·  20 вопросов  ·  ~50 мин  ·  ⏱ Таймер 50:00  ·  Средний  · 

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

Разбирает try, except, else, finally, собственные исключения и сохранение причины ошибки. Здесь проверяется перенос знания на новый код: вопросы распределены между шкалами «Перехват ошибок», «Иерархия исключений», «Завершение через finally» и «Собственные исключения». Все задания рассчитаны на CPython 3.12; отличия других реализаций или версий учитываются только там, где это прямо оговорено.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Версия: CPython 3.12. Выберите один ответ из четырёх. На 20 вопросов отведено не меньше 40 минут; код лучше читать построчно. После завершения вы увидите общий процент, четыре тематические шкалы и объяснение каждого ответа.
Вопрос 1 из 20
Какой обработчик сработает?
Python
try:
    int("3.5")
except TypeError:
    print("type")
except ValueError:
    print("value")
Вопрос 2 из 20
Что выведет порядок наследования исключений?
Python
try:
    {}["x"]
except LookupError:
    print("lookup")
except KeyError:
    print("key")
Вопрос 3 из 20
Что произойдёт с return в finally?
Python
def f():
    try:
        return 1
    finally:
        return 2
print(f())
Вопрос 4 из 20
Как будет показана цепочка причин?
Вопрос 5 из 20
Большой блок обёрнут в `except Exception: pass`, и сбой исчезает из диагностики. Какое исправление делает обработку точечной?
Вопрос 6 из 20
Проследите `try`, `else` и код после конструкции. Какие строки будут напечатаны?
Python
try:
    value = int("12")
except ValueError:
    print("bad")
else:
    print(value * 2)
finally:
    print("done")
Вопрос 7 из 20
Какой обработчик лучше для чтения необязательного файла настроек?
Вопрос 8 из 20
Для вызова `f(2)` проследите `return` и блок `finally`. Какие строки напечатает показанный фрагмент?
Python
def f(x):
    try:
        return 10 // x
    except ZeroDivisionError:
        return 0
    finally:
        print("finish")
print(f(2))
Вопрос 9 из 20
Какой тип исключения возникнет первым?
Python
values = []
print(values[0] / 0)
Вопрос 10 из 20
Что делает bare raise?
Вопрос 11 из 20
Нужно спроектировать отдельную обработку предметной ошибки заказа. Какое решение лучше общего `ValueError`?
Вопрос 12 из 20
Что выведет подавление исключения?
Python
class CM:
    def __enter__(self): return self
    def __exit__(self, t, v, tb): return t is ValueError
with CM():
    raise ValueError("x")
print("after")
Вопрос 13 из 20
Как сохранить исходную трассировку при добавлении контекста внутри except?
Вопрос 14 из 20
Исключение возникает внутри блока `else`, а `except` относится к предшествующему `try`. Что произойдёт в этом граничном случае?
Python
try:
    value = 2
except ValueError:
    print("caught")
else:
    1 / 0
Вопрос 15 из 20
Почему не стоит ловить `BaseException` в обычной бизнес-логике?
Вопрос 16 из 20
Какой результат у assert?
Python
def positive(x):
    assert x > 0, "must be positive"
    return x
positive(0)
Вопрос 17 из 20
Что должно находиться в try при точечном перехвате?
Вопрос 18 из 20
Что выведет несколько исключений в одном обработчике?
Python
try:
    int(None)
except (TypeError, ValueError) as exc:
    print(type(exc).__name__)
Вопрос 19 из 20
Когда finally особенно уместен?
Вопрос 20 из 20
Что произойдёт при `raise ValueError` без экземпляра?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу