Исключения и классы.
Все исключения являются классами. Чтобы определить новый тип исключения, мы фактически создаём новый класс, наследующий базовому классу Exception:
>>> class MyError(Exception): ... def __init__(self, value): ... self.value = value ... def __str__(self): ... return `self.value` ... >>> try: ... raise MyError(2*2) ... except MyError, e: ... print 'My exception occurred, value:', e.value ...
My exception occurred, value: 4
>>> raise MyError, 'oops!'
Traceback (most recent call last):
File "<stdin>", line 1, in ?
__main__.MyError: 'oops!'
Обычно в классах-исключениях делают небольшие конструкторы __init__, которые инициализируют поля класса, чтобы к ним впоследствие можно было бы обратиться:
class Error(Exception): """Базовый класс для исключений в модуле.""" pass
class InputError(Error): """Ошибка ввода данных.
Поля: expression – выражение, где произошла ошибка message – объяснение ошибки """
def __init__(self, expression, message): self.expression = expression self.message = message
class TransitionError(Error): """Возникает при неверной операции
Поля: previous – состояние до начала плохой операции next – состояние после операции message – объяснение, почему такая операция недопустима """
def __init__(self, previous, next, message): self.previous = previous self.next = next self.message = message
|