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
   61   62   63   64   65   66   67   68   69   70   71