Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ

Bạn có thể viết các chương trình xử lý các trường hợp ngoại lệ đã chọn. Hãy xem ví dụ sau, yêu cầu người dùng nhập thông tin cho đến khi nhập được một số nguyên hợp lệ, nhưng cho phép người dùng ngắt chương trình (sử dụng Control-C hoặc bất kỳ thứ gì hệ điều hành hỗ trợ); lưu ý rằng gián đoạn do người dùng tạo được báo hiệu bằng cách tăng ngoại lệ KeyboardInterrupt.
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ
Câu lệnh try hoạt động như sau.
- Đầu tiên, mệnh đề try ((các) câu lệnh giữa từ khóa try và exception) được thực thi.
- Nếu không có ngoại lệ nào xảy ra, mệnh đề Ngoại trừ (except) sẽ bị bỏ qua và quá trình thực thi câu lệnh try kết thúc.
- Nếu một ngoại lệ xảy ra trong khi thực hiện mệnh đề try, phần còn lại của mệnh đề sẽ bị bỏ qua. Sau đó, nếu kiểu của nó khớp với ngoại lệ được đặt tên sau từ khóa ngoại trừ, thì mệnh đề ngoại trừ được thực thi, và sau đó việc thực thi tiếp tục sau block try / except.
- Nếu một ngoại lệ xảy ra không khớp với ngoại lệ có tên trong mệnh đề Ngoại trừ (except), nó được chuyển cho các câu lệnh try bên ngoài; nếu không tìm thấy trình xử lý nào, nó là một ngoại lệ chưa được xử lý và việc thực thi sẽ dừng lại với một thông báo như được hiển thị ở trên.
Một câu lệnh try có thể có nhiều hơn một mệnh đề except, để chỉ định các trình xử lý cho các ngoại lệ khác nhau. Nhiều nhất một trình xử lý sẽ được thực thi. Các trình xử lý chỉ xử lý các ngoại lệ xảy ra trong mệnh đề try tương ứng, không xử lý trong các trình xử lý khác của cùng một câu lệnh try. Mệnh đề ngoại trừ có thể đặt tên cho nhiều ngoại lệ dưới dạng một bộ giá trị được đặt trong ngoặc đơn, ví dụ:
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ
Một lớp trong mệnh đề except tương thích với một ngoại lệ nếu nó là cùng một lớp hoặc một lớp cơ sở của nó (nhưng không ngược lại - mệnh đề Ngoại trừ liệt kê một lớp dẫn xuất không tương thích với một lớp cơ sở). Ví dụ, đoạn mã sau sẽ in B, C, D theo thứ tự đó:
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ
Lưu ý nếu các mệnh đề except được đảo ngược (với ngoại trừ B trước), nó sẽ in ra B, B, B - mệnh đề ngoại trừ phù hợp đầu tiên được kích hoạt.
Tất cả các ngoại lệ kế thừa từ BaseException và vì vậy nó có thể được sử dụng như một ký tự đại diện. Hãy sử dụng nó một cách hết sức thận trọng, vì nó rất dễ che giấu một lỗi lập trình thực sự! Nó cũng có thể được sử dụng để in thông báo lỗi và sau đó gọi lại ngoại lệ (cho phép người gọi xử lý ngoại lệ):
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ
Ngoài ra, mệnh đề ngoại trừ cuối cùng có thể bỏ qua (các) tên ngoại lệ, tuy nhiên giá trị ngoại lệ sau đó phải được truy xuất từ sys.exc_info () [1].
Câu lệnh try… except có một mệnh đề else tùy chọn, khi xuất hiện, mệnh đề này phải theo sau tất cả các mệnh đề ngoại trừ. Nó hữu ích cho đoạn mã phải được thực thi nếu mệnh đề try không nêu ra ngoại lệ. Ví dụ:
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ
Việc sử dụng mệnh đề else tốt hơn là thêm mã bổ sung vào mệnh đề try vì nó tránh vô tình bắt được một ngoại lệ không được nêu ra bởi mã đang được bảo vệ bởi câu lệnh try… Ngoại trừ.
Khi một ngoại lệ xảy ra, nó có thể có một giá trị được liên kết, còn được gọi là đối số của ngoại lệ. Sự hiện diện và kiểu của đối số phụ thuộc vào kiểu ngoại lệ.
Mệnh đề ngoại trừ có thể chỉ định một biến sau tên ngoại lệ. Biến được liên kết với một trường hợp ngoại lệ với các đối số được lưu trữ trong instance.args. Để thuận tiện, cá thể ngoại lệ định nghĩa __str __ () để các đối số có thể được in trực tiếp mà không cần phải tham chiếu đến .args. Người ta cũng có thể khởi tạo một ngoại lệ trước khi gọi nó lên và thêm bất kỳ thuộc tính nào vào nó như mong muốn.
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ
Nếu một ngoại lệ có các đối số, chúng được in dưới dạng phần cuối cùng (‘chi tiết’) của thông báo cho các ngoại lệ không được xử lý.
Các trình xử lý ngoại lệ không chỉ xử lý các ngoại lệ nếu chúng xảy ra ngay lập tức trong mệnh đề try, mà còn nếu chúng xảy ra bên trong các hàm được gọi (thậm chí gián tiếp) trong mệnh đề try. Ví dụ:
Học Python qua việc hiểu những lỗi code: Xử lý các ngoại lệ

>>> Học Python qua việc hiểu những lỗi code

 


Đăng nhập một lần thảo luận tẹt ga
Thành viên mới đăng
Top