Page 65 - Python Simple
P. 65

8. Lỗi và biệt lệ                                               http://www.vithon.org/tutorial/2.5/node10.html



                 ...    print inst           # __str__ allows args to printed directly
                 ...    x, y = inst          # __getitem__ allows args to be unpacked directly
                 ...    print 'x =', x
                 ...    print 'y =', y
                 ...
                 <type 'instance'>
                 ('spam', 'eggs')
                 ('spam', 'eggs')
                 x = spam
                 y = eggs


             Nếu biệt lệ có một thông số, nó sẽ được in ra như là phần cuối (`chi tiết') của thông
             điệp của những biệt lệ không được xử lý.

             Các phần xử lý biệt lệ không chỉ xử lý các biệt lệ xảy ra ngay trong vế try, mà còn xử
             lý cả biệt trong những hàm được gọi (trực tiếp hoặc gián tiếp) trong vế try. Ví dụ:

                 >>> def this_fails():
                 ...     x = 1/0
                 ...
                 >>> try:
                 ...     this_fails()
                 ... except ZeroDivisionError, detail:
                 ...     print 'Handling run-time error:', detail
                 ...
                 Handling run-time error: integer division or modulo by zero


             8.4 Nâng biệt lệ


             raise (câu lệnh) cho phép nhà lập trình ép xảy ra một biệt lệ được chỉ định. Ví dụ:

                 >>> raise NameError, 'HiThere'
                 Traceback (most recent call last):
                   File "<stdin>", line 1, in ?
                 NameError: HiThere

             Thông số đầu tiên cho raise chỉ định biệt lệ sẽ được nâng. Thông số (tùy chọn) thứ
             hai chỉ định thông số của biệt lệ. Hoặc là, các dòng trên có thể được viết raise
             NameError('HiThere'). Cả hai dạng đều đúng, nhưng người ta có vẻ chuộng dạng
             thứ hai hơn.

             Nếu bạn cần xác định xem một biệt lệ có được nâng chưa nhưng không định xử lý nó,
             dạng đơn giản hơn của câu lệnh raise cho phép bạn nâng lại (re-raise) biệt lệ:

                 >>> try:
                 ...     raise NameError, 'HiThere'
                 ... except NameError:
                 ...     print 'An exception flew by!'
                 ...     raise
                 ...
                 An exception flew by!
                 Traceback (most recent call last):
                   File "<stdin>", line 2, in ?
                 NameError: HiThere



     4 of 7                                                                                   08/31/2011 10:27 AM
   60   61   62   63   64   65   66   67   68   69   70