Поймать ошибку
Строки, которые могут остановиться, ставят под try. except называет остановку, которую вы обработаете. except ZeroDivisionError выполняется, только если остановка внутри try носит это имя. После try и except целиком программа идёт дальше.
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 не выполняется. Следующая программа начинается заново. От первого экрана здесь ничего не осталось.
try:
print(8 / 2)
except ZeroDivisionError:
print("skip")
print("done")
На экране 4.0, затем done. 4.0 — это четыре, с десятичной точкой. Остановки не было, поэтому skip не пишется. done всё равно выполняется, потому что стоит вне поимки.
Строки под try и под except сдвинуты вправо. Этот сдвиг и помещает их внутрь. print("done") под except не сдвинут, поэтому к поимке не относится. Он выполняется, когда try заканчивается, и также когда названная остановка поймана.
Следующая страница — самим вызвать остановку. Эта страница ловит только остановку, на которую строка уже наткнулась, и только если имя совпало.
Что пишется и что пропускается
- Что пишет первая программа?
- Что происходит с print("rice")?
- Что пишет вторая программа?
- Что будет, если print(tea) внутри try, tea так и не дали значение, а except называет только ZeroDivisionError?
Имя должно совпасть
Первый экран — skip, затем done. rice не выполняется, потому что после остановки всё ещё внутри try. Второй — 4.0, затем done, и skip не пишется. NameError не ловится через except ZeroDivisionError. done снаружи, поэтому выполняется и когда названная остановка поймана, и когда try заканчивается. Следующая страница — самим вызвать остановку.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху