Page 62 - Python Simple
P. 62

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




                                                Bài chỉ dẫn Python




             8. Lỗi và biệt lệ


             Đến bây giờ chũng ta cũng chỉ mới nhắc đến các thông điệp lỗi, nhưng nếu bạn đã
             thử qua các ví dụ thì bạn có thể đã gặp nhiều hơn. Có (ít nhất) hai loại lỗi khác biệt:
             lỗi cú pháp và biệt lệ.


             8.1 Lỗi cú pháp


             Lỗi cú pháp, còn biết đến như lỗi phân tích (parsing error), có lẽ là phàn nàn lớn nhất
             bạn gặp phải khi vẫn đang học Python:
                 >>> while True print 'Hello world'
                   File "<stdin>", line 1, in ?
                     while True print 'Hello world'
                                    ^
                 SyntaxError: invalid syntax

             Bộ phân tích lặp lại dòng gây lỗi và hiển thị một mũi tên nhỏ trỏ vào điểm đầu tiên lỗi
             được phát hiện. Lỗi nằm ở dấu hiệu phía trước mũi tên: trong ví dụ trên, lỗi được phát
             hiện ở từ khóa print, vì thiếu một dấu hai chấm (":") ở trước đó. Tên tập tin vào số
             dòng được hiển thị để bạn biết tìm lỗi ở chỗ nào nếu đầu vào là từ một kịch bản.

             8.2 Biệt lệ



             Cho dù một câu lệnh hoặc biểu thức là đúng đắn, nó vẫn có thể tạo lỗi khi thực thi.
             Những lỗi bị phát hiện trong lúc thực thi được gọi là biệt lệ và không tai hại một
             cách vô điều kiện: bạn sẽ học cách xử lý chúng trong các chương trình Python. Hầu
             hết các biệt lệ đều được xử lý bởi chương trình và dẫn đến kết quả là các thông điệp
             lỗi như ở đây:

                 >>> 10 * (1/0)
                 Traceback (most recent call last):
                   File "<stdin>", line 1, in ?
                 ZeroDivisionError: integer division or modulo by zero
                 >>> 4 + spam*3
                 Traceback (most recent call last):
                   File "<stdin>", line 1, in ?
                 NameError: name 'spam' is not defined
                 >>> '2' + 2
                 Traceback (most recent call last):
                   File "<stdin>", line 1, in ?
                 TypeError: cannot concatenate 'str' and 'int' objects


             Dòng cuối cùng của thông điệp lỗi cho biết chuyện gì xảy ra. Biệt lệ có nhiều kiểu, và
             kiểu được hiển thị như là một phần của thông điệp: các kiểu trong ví dụ là
             ZeroDivisionError, NameError và TypeError. Chuỗi được hiển thị như là kiểu biệt
             lệ là tên của biệt lệ có sẵn vừa xảy ra. Điều này đúng với tất cả các biệt lệ có sẵn,



     1 of 7                                                                                   08/31/2011 10:27 AM
   57   58   59   60   61   62   63   64   65   66   67