1. Exception là gì?
Exception khiến thay đổi luồng thực thi bình thường của chương trình.
Khi một đoạn mã Python phát sinh ngoại lệ, ta cần xử lý ngoại lệ, nếu không chương trình sẽ bị dừng.
Hướng dẫn xử lý ngoại lệ (exception) trong Python
2. Cơ chế xử lý Exception trong Python
try
, except
và finally
.
- Khối try: Dùng để thử lỗi. Khối try sẽ chứa các đoạn mã có khả năng gây ra lỗi
- Khối except: Dùng để xử lý lỗi. Khối except sẽ chứa các đoạn mã xử lý lỗi được phát sinh trong khối try. Khối except có ý nghĩa giống như khối catch ở các ngôn ngữ khác như Java, C#
- Khối finally: Dùng để chứa các đoạn mã sẽ được thực thi cho dù chương trình có lỗi hay không. Khối này thường dùng để chứa các đoạn lệnh giải phóng tài nguyên sau khi thực thi xong chương trình, VD như đóng file, đóng kết nối đến CSDL v.v…
Cơ chế xử lý lỗi của Python như sau:
Nếu chương trình có lỗi, khối try sẽ dừng lại, và chương trình sẽ chuyển đến khối except để thực thi và xử lý lỗi.
Nếu chương trình có nhiều khối except, thì từng khối sẽ lần lượt được đánh giá theo thứ tự từ trên xuống dưới, khối nào xử lý được lỗi thì sẽ được thực thi.
Nếu chương trình không có lỗi, khối try sẽ được thực thi toàn bộ, chương trình không thực thi khối except.
Ta có thể sử dụng nhiều khối except sau khối try, trong trường hợp ta muốn xử lý nhiều loại lỗi khác nhau.
3. Ví dụ về xử lý Exception trong Python
age
trong khối try
. Biến age
chưa được khai báo, vì vậy khi sử dụng sẽ có lỗi.
Trong chương trình, ta khai báo 2 khối except
, một khối xử lý lỗi về tên biến (NameError
), một khối xử lý lỗi nói chung.
NameError
) trong Python là những gì thì xem tại đây.
Khi thực thi chương trình, ta thấy chương trình hiện thông báo lỗi như ta mong muốn.
Khối except đầu tiên được thực thi, vì ta chưa khai báo biến.
Cơ chế xử lý Exception trong Python – VD1
Nếu ta thay đổi lại chương trình, ta sẽ thấy thông báo lỗi khác.
Ở đây ta đã sửa lại chương trình, ta khai báo biến age
, rồi in ra giá trị của biến age
.
Tuy nhiên, trong bài này, ta đã cộng chuỗi sai, vì biến age
thuộc kiểu int
, lẽ ra ta phải chuyển thành kiểu string.
> Lưu ý: Khi nối chuỗi trong Python thì phải sử dụng cùng kiểu dữ liệu. Vì thế ta phải chuyển age thành kiểu str
Kết quả được hiển thị như hình bên dưới.
Cơ chế xử lý Exception trong Python – VD2
Ngoài ra, ta có thể sử dụng từ khóa else
để định nghĩa một khối lệnh sẽ được thực thi nếu không có lỗi phát sinh.
Dĩ nhiên là hành động sau khi đã thực thi khối try
.
Ví dụ:
Trong ví dụ này, ta đã sử dụng khối try ... except
để minh họa việc xử lý lỗi.
Tuy nhiên, trong ví dụ này, khối try
không có lỗi, vì vậy chương trình không thực thi khối except
, mà sẽ thực thi khối else
.
else
đúng như ta mong muốn
Kết hợp sử dụng Else để để xử lý ngoại lệ trong Python
Ví dụ về sử dụng khối finally trong Python
Trong ví dụ dưới đây, ta sử dụng khối try ... except
và finally
.
Vì biến x
chưa khai báo, nên có lỗi.
Chương trình sẽ thực thi khối except
, sau đó sẽ thực thi khối finally
, vì khối finally sẽ luôn được thực hiện, bất kể chương trình có xảy ra lỗi hay không có lỗi.
Cơ chế hoạt động của khối Finally khi xử lý ngoại lệ trong Python
Tổng kết
Chúc bạn học Python tốt!