Page 63 - Python Simple
P. 63
8. Lỗi và biệt lệ http://www.vithon.org/tutorial/2.5/node10.html
nhưng không nhất thiết đúng với các biệt lệ do người dùng định nghĩa (mặc dù đó là
một quy ước hữu dụng). Các tên biệt lệ chuẩn là những từ định danh có sẵn (không
phải là từ khóa).
Phần còn lại cho biết chi tiết về kiểu biệt lệ và chuyện gì gây ra nó.
Phần trước của thông điệp lỗi cho biết hoàn cảnh khi xảy ra biệt lệ, ở dạng lần ngược
ngăn xếp (stack traceback). Bình thường nó chứa một lần ngược ngăn xếp liệt kê các
dòng nguồn; tuy nhiên, nó sẽ không hiển thị các dòng đọc từ đầu vào chuẩn.
Tham khảo thư viện Python liệt kê các biệt lệ có sẵn và ý nghĩa của chúng.
8.3 Xử lý biệt lệ
Chúng ta có thể viết những chương trình xử lý những biệt lệ được chọn. Hãy xem ví
dụ sau, nó yêu cầu người dùng nhập vào dữ liệu cho tới khi một số nguyên được
nhập, nhưng cũng cho phép người dùng ngưng chương trình (dùng Control-C hoặc
phím tắt khác mà hệ điều hành hỗ trợ); lưu ý rằng sự ngắt quãng do người dùng tạo
nên được đánh dấu bởi việc nâng biệt lệ KeyboardInterrupt .
>>> while True:
... try:
... x = int(raw_input("Please enter a number: "))
... break
... except ValueError:
... print "Oops! That was no valid number. Try again..."
...
try (câu lệnh) hoạt động như sau.
Trước tiên, vế try (các câu lệnh giữa từ khóa try và except ) được thực thi.
Nếu không có biệt lệ nào xảy ra, vế except được bỏ qua và câu lệnh try kết
thúc.
Nếu trong khi thực thi vế try xảy ra biệt lệ, phần còn lại của vế được bỏ qua. Sau
đó nếu kiểu biệt lệ hợp với kiểu được chỉ định sau từ khóa except , thì vế except
được thực thi, và rồi việc thực thi tiếp tục sau câu lệnh try .
Nếu biệt lệ xảy ra không hợp với biệt lệ được chỉ định ở vế except, nó sẽ được
truyền ra các câu lệnh try bên ngoài; nếu không có đoạn mã xử lý nào, nó là
một biệt lệ không được xử lý và việc thực thi dừng lại với một thông báo như
trên.
A try (câu lệnh) có thể có nhiều hơn một vế except, để chỉ rõ cách xử lý cho những
biệt lệ khác nhau. Nhiều nhất là một đoạn xử lý (handler) sẽ được thực thi. Các đoạn
xử lý chỉ xử lý biệt lệ xảy ra trong vế try tương ứng, không xử lý các biệt lệ trong các
đoạn xử lý khác của cùng câu lệnh try . Vế except có thể định danh nhiều biệt lệ
trong một bộ (tuple), ví dụ:
... except (RuntimeError, TypeError, NameError):
... pass
2 of 7 08/31/2011 10:27 AM