Giả sử, có một tác vụ mà bạn sẽ luôn muốn chương trình của mình thực hiện, cho dù nó chạy hoàn hảo hay có đưa ra bất kỳ loại lỗi nào. Ví dụ, chúng ta sử dụng cậu lệnh try, cái mà có một mệnh đề tùy chọn là “finally” để thực hiện các clean up actions – tức là các hành động dọn dẹp, các hành động dọn dẹp này là cần thiết và phải được thực hiện trong mọi hoàn cảnh.
Về các Cleanup actions – các hành động dọn dẹp: Trước khi rời khỏi câu lệnh try, mệnh đề “finally” sẽ luôn luôn được thực thi, cho dù có ngoại lệ (exception) nào được đưa ra hay không. Đây là những mệnh đề được sử dụng nhằm khai báo các clean-up actions cần phải được thực thi trong mọi trường hợp.
Bất cứ khi nào một ngoại lệ xảy ra và đang không được xử lý bởi mệnh đề except, thì cái finally đầu tiên sẽ xảy ra và sau đó lỗi được đưa ra, theo như mặc định. Điều này sẽ được thể hiện trong ví dụ [Code 3].
Nội dung chính
1. Các chương trình Python minh họa về việc “Khai báo các Clean Up Actions”
1. Ví dụ Code 1: Code hoạt động bình thường và các clean-up actions được thực hiện ở cuối
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
# Python code to illustrate
# clean up actions
def divide(x, y):
try:
# Floor Division : Gives only Fractional Part as Answer
result = x // y
except ZeroDivisionError:
print("Sorry ! You are dividing by zero ")
else:
print("Yeah ! Your answer is :", result)
finally:
print("I'm finally clause, always raised !! ")
# Look at parameters and note the working of Program
divide(3, 2)
Kết quả in ra là:
Yeah ! Your answer is : 1
I'm finally clause, always raised !!
2. Ví dụ Code 2:
Code đưa ra lỗi và được xử lý một cách cẩn thận bên trong mệnh đề except. Lưu ý rằng các Clean-up actions sẽ được thực hiện ở cuối.
# Python code to illustrate
# clean up actions
def divide(x, y):
try:
# Floor Division : Gives only Fractional Part as Answer
result = x // y
except ZeroDivisionError:
print("Sorry ! You are dividing by zero ")
else:
print("Yeah ! Your answer is :", result)
finally:
print("I'm finally clause, always raised !! ")
# Look at parameters and note the working of Program
divide(3, 0)
Kết quả in ra là:
Sorry ! You are dividing by zero
I'm finally clause, always raised !!
3. Ví dụ Code 3:
Code đưa ra lỗi, nhưng chúng ta không có mệnh đề except nào để xử lý nó. Do đó, clean-up action sẽ được thực hiện đầu tiên, và sau đó lỗi (theo mặc định) sẽ được đưa ra bởi trình biên dịch (compiler).
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
# Python code to illustrate
# clean up actions
def divide(x, y):
try:
# Floor Division : Gives only Fractional Part as Answer
result = x // y
except ZeroDivisionError:
print("Sorry ! You are dividing by zero ")
else:
print("Yeah ! Your answer is :", result)
finally:
print("I'm finally clause, always raised !! ")
# Look at parameters and note the working of Program
divide(3, "3")
Kết quả in ra là:
I'm finally clause, always raised !!
Thông báo về lỗi là:
Traceback (most recent call last):
File "C:/Users/DELL/Desktop/Code.py", line 15, in
divide(3, "3")
File "C:/Users/DELL/Desktop/Code.py", line 7, in divide
result = x // y
TypeError: unsupported operand type(s) for //: 'int' and 'str'
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
- Ebook về python tại đây.
- Các series tự học lập trình khác
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!