Page 66 - Python Simple
P. 66
8. Lỗi và biệt lệ http://www.vithon.org/tutorial/2.5/node10.html
8.5 Biệt lệ tự định nghĩa
Các chương trình có thể đặt tên biệt lệ riêng bằng cách tạo một lớp biệt lệ mới. Các
biệt lệ thường nên kế thừa từ lớp Exception , trực tiếp hoặc gián tiếp. Ví dụ:
>>> class MyError(Exception):
... def __init__(self, value):
... self.value = value
... def __str__(self):
... return repr(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!'
Trong ví dụ này, mặc định __init__ của Exception đã được định nghĩa lại. Cách
thức mới chỉ đơn giản tạo thuộc tính value . Nó thay thế cách thức mặc định tạo thuộc
tính args .
Các lớp biệt lệ có thể được định nghĩa để làm bất kỳ việc gì như các lớp khác, nhưng
chúng thường là đơn giản và chỉ cung cấp một số thuộc tính để chứa thông tin về lỗi
cho các phần xử lý biệt lệ. Khi tạo một mô-đun mà có thể nâng vài lỗi khác biệt, cách
thông thường là tạo một lớp cơ sở cho các biệt lệ được định nghĩa bởi mô-đun đó, và
kế thừa từ đó để tạo những lớp biệt lệ cụ thể cho những trường hợp lỗi khác nhau:
class Error(Exception):
"""Base class for exceptions in this module."""
pass
class InputError(Error):
"""Exception raised for errors in the input.
Attributes:
expression -- input expression in which the error occurred
message -- explanation of the error
"""
def __init__(self, expression, message):
self.expression = expression
self.message = message
class TransitionError(Error):
"""Raised when an operation attempts a state transition that's not
allowed.
Attributes:
5 of 7 08/31/2011 10:27 AM