Загрузка...

Поймать ошибку

Строки, которые могут остановиться, ставят под try. except называет остановку, которую вы обработаете. except ZeroDivisionError выполняется, только если остановка внутри try носит это имя. После try и except целиком программа идёт дальше.

остановка поймана, rice не выполняется, done выполняется

python
try:
    print(1 / 0)
    print("rice")
except ZeroDivisionError:
    print("skip")

print("done")

На экране skip, затем done. print(1 / 0) останавливается внутри try. print("rice") всё ещё внутри try, поэтому не выполняется. Поймать остановку не значит вернуться и доделать остаток try. except пишет skip. print("done") снаружи, поэтому выполняется после поимки. Программа на этой остановке не кончается.

Имя должно совпасть. Поставьте print(tea) внутрь этого try и не давайте tea значение: остановка — NameError. except ZeroDivisionError это имя не обрабатывает. Программа всё равно останавливается. skip не пишется, done тоже. Этой строки нет в программе на этой странице.

Если каждая строка внутри try доходит до конца, except не выполняется. Следующая программа начинается заново. От первого экрана здесь ничего не осталось.

остановки нет, поэтому skip не пишется

python
try:
    print(8 / 2)
except ZeroDivisionError:
    print("skip")

print("done")

На экране 4.0, затем done. 4.0 — это четыре, с десятичной точкой. Остановки не было, поэтому skip не пишется. done всё равно выполняется, потому что стоит вне поимки.

Строки под try и под except сдвинуты вправо. Этот сдвиг и помещает их внутрь. print("done") под except не сдвинут, поэтому к поимке не относится. Он выполняется, когда try заканчивается, и также когда названная остановка поймана.

Следующая страница — самим вызвать остановку. Эта страница ловит только остановку, на которую строка уже наткнулась, и только если имя совпало.

Что пишется и что пропускается

  1. Что пишет первая программа?
  2. Что происходит с print("rice")?
  3. Что пишет вторая программа?
  4. Что будет, если print(tea) внутри try, tea так и не дали значение, а except называет только ZeroDivisionError?

Имя должно совпасть

Первый экран — skip, затем done. rice не выполняется, потому что после остановки всё ещё внутри try. Второй — 4.0, затем done, и skip не пишется. NameError не ловится через except ZeroDivisionError. done снаружи, поэтому выполняется и когда названная остановка поймана, и когда try заканчивается. Следующая страница — самим вызвать остановку.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
5
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху