Module (96%)
Section (90%)

Основные тезисы


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='! ')