Основные тезисы
1. Ветвь else:
инструкции try
выполняется, если во время выполнения блока try:
не было исключения.
2. Ветвь finally:
инструкции try
выполняется всегда.
3. Синтаксис except Exception_Name как exception_object:
позволяет Вам перехватывать объект, несущий информацию об ожидающем исключении. Свойство объекта с именем args
(кортеж) хранит все аргументы, переданные конструктору объекта.
4. Классы исключений могут быть расширены, чтобы обогатить их новыми возможностями или адаптировать их свойства к вновь определенным исключениям.
Например:
try:
assert __name__ == "__main__"
except:
print("fail", end=' ')
else:
print("success", end=' ')
finally:
print("done")
Код выводит: success done
.
Упражнение 1
Каков ожидаемый вывод следующего кода?
import math
try:
print(math.sqrt(9))
except ValueError:
print("inf")
else:
print("fine")
Упражнение 2
Каков ожидаемый вывод следующего кода?
import math
try:
print(math.sqrt(-9))
except ValueError:
print("inf")
else:
print("fine")
finally:
print("the end")
Упражнение 3
Каков ожидаемый вывод следующего кода?
import math
class NewValueError(ValueError):
def __init__(self, name, color, state):
self.data = (name, color, state)
try:
raise NewValueError("Enemy warning", "Red alert", "High readiness")
except NewValueError as nve:
for arg in nve.args:
print(arg, end='! ')