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