Khối mã finally
cũng là một phần của xử lý ngoại lệ. Khi chúng tôi xử lý ngoại lệ bằng cách sử dụng khối try
và except
, chúng tôi có thể bao gồm khối finally
ở cuối. Khối finally
luôn được thực thi, vì vậy nó thường được sử dụng để thực hiện các tác vụ kết thúc như đóng tài nguyên tệp hoặc đóng kết nối cơ sở dữ liệu hoặc có thể kết thúc quá trình thực thi chương trình bằng một thông báo thú vị
Khối finally
có/không có Xử lý ngoại lệ
Nếu trong mã của bạn, khối except
không thể bắt ngoại lệ và thông báo ngoại lệ được in trên bảng điều khiển, làm gián đoạn quá trình thực thi mã, khối cuối cùng vẫn sẽ được thực thi
Hãy lấy một ví dụ
Hãy thử chạy đoạn mã trên cho hai giá trị khác nhau
Nhập một số giá trị số nguyên làm tử số và cung cấp giá trị 0 cho mẫu số. Sau đây sẽ là đầu ra
Bạn đã chia một số cho 0, điều này không được phép. Thực thi mã Tổng kết. Điều này sẽ được in?
Vì chúng ta đã xử lý lớp ngoại lệ ZeroDivisionError nên đầu tiên, khối
except
được thực thi, sau đó là khốifinally
và sau đó là phần còn lại của mãBây giờ, một số giá trị số nguyên làm tử số và cung cấp một số giá trị chuỗi cho mẫu số. Sau đây sẽ là đầu ra
Thực thi mã Tổng kết. Traceback [cuộc gọi gần đây nhất cuối cùng]. Tập tin "chính. py", dòng 4, inb = int[input["Nhập số mẫu số. "]] Giá trịError. chữ không hợp lệ cho int[] với cơ số 10. 'dsw'
Vì chúng tôi chưa xử lý ngoại lệ ValueError, do đó mã của chúng tôi sẽ ngừng thực thi, ngoại lệ sẽ bị ném, nhưng mã trong khối
finally
vẫn được thực thi
Ngoại lệ trong khối except
Chúng tôi sử dụng khối except
cùng với khối try
để xử lý các ngoại lệ, nhưng điều gì sẽ xảy ra nếu một ngoại lệ xảy ra bên trong khối except
. Chà, khối finally
vẫn sẽ được thực thi
# try block
try:
a = 10
b = 0
print["Result of Division: " + str[a/b]]
# except block handling division by zero
except[ZeroDivisionError]:
print["Result of Division: " + str[a/b]]
finally:
print["Code execution Wrap up!"]
Thực thi mã Tổng kết. Traceback [cuộc gọi gần đây nhất cuối cùng]. Tập tin "chính. py", dòng 4, inprint["Kết quả phép chia. " + str[a/b]] ZeroDivisionError. chia cho 0 Trong quá trình xử lý ngoại lệ trên, một ngoại lệ khác đã xảy ra. Traceback [cuộc gọi gần đây nhất cuối cùng]. Tập tin "chính. py", dòng 7, inprint["Kết quả phép chia. " + str[a/b]] ZeroDivisionError. chia cho số không
Rõ ràng khối _______________ là khối đầu tiên được in trên bảng điều khiển, sau đó là thông báo ngoại lệ đầu tiên và sau đó là thông báo ngoại lệ thứ hai
- Tại sao chúng ta cần khối cuối cùng?
- cuối cùng Chặn trong Python
- Tại sao không chặn 'thử ngoại trừ' đối với các hoạt động dọn dẹp?
- Các trường hợp luồng điều khiển khác nhau của thử ngoại trừ cuối cùng trong python
Trong bất kỳ dự án nào sau khi hoàn thành nhiệm vụ, nên tiêu hủy tất cả những thứ không mong muốn được tạo ra để hoàn thành nhiệm vụ. Ví dụ: nếu tôi đã mở kết nối cơ sở dữ liệu trong mã của mình và thực hiện một số tác vụ liên quan đến cơ sở dữ liệu. Sau khi hoàn thành các nhiệm vụ, nên đóng kết nối. Các hoạt động dọn dẹp này rất quan trọng và cần được xử lý trong mã của chúng tôi
cuối cùng Chặn trong Pythoncuối cùng là một từ khóa trong python có thể được sử dụng để viết khối cuối cùng để thực hiện các hoạt động dọn dẹp
Tại sao không chặn 'thử ngoại trừ' đối với các hoạt động dọn dẹp?thử khối. Không có gì đảm bảo rằng mọi câu lệnh sẽ được thực thi bên trong khối thử. Nếu một ngoại lệ được đưa ra ở dòng mã thứ hai trong khối thử tại, thì các dòng mã còn lại trong khối đó sẽ không thực thi. Vì vậy, không nên viết mã dọn dẹp bên trong khối thử
trừ khối. Không có gì đảm bảo rằng một khối ngoại trừ sẽ thực thi. Nếu không có ngoại lệ thì khối ngoại trừ sẽ không được thực thi. Do đó, cũng không nên viết mã dọn dẹp bên trong khối ngoại trừ
Phần kết luậnVì vậy, cần có một khối riêng biệt để viết các hoạt động dọn dẹp. Khối mã này phải luôn thực thi bất kể ngoại lệ. Nếu không có ngoại lệ, thì mã dọn dẹp sẽ thực thi. Nếu một ngoại lệ được nêu ra và cũng được xử lý, thì mã dọn dẹp cũng sẽ được thực thi. Nếu một ngoại lệ được đưa ra, nhưng không được xử lý, thì mã dọn dẹp cũng sẽ được thực thi
Tất cả các yêu cầu trên, không thể đạt được bằng khối tryngoại trừ, có thể đạt được bằng khối cuối cùng. Khối cuối cùng sẽ luôn được thực thi, bất kể ngoại lệ có được đưa ra hay không, ngoại lệ có được xử lý hay không
Trường hợp 1. Nếu không có ngoại lệ, thì khối cuối cùng sẽ thực thiChương trình. demo20. py
try: print["try block"] except: print["except block"] finally: print["finally block"]
đầu ra
trường hợp 2. Nếu một ngoại lệ được đưa ra và xử lý với khối except, thì khối cuối cùng cũng sẽ được thực thi
Chương trình. demo21. py
try: print["try block"] print[10/0] except ZeroDivisionError: print["except block"] finally: print["finally block"]
đầu ra
Trường hợp 3. Nếu một ngoại lệ được đưa ra bên trong khối try nhưng khối ngoại trừ không xử lý ngoại lệ cụ thể đó, thì khối cuối cùng cũng sẽ được thực thi
Chương trình. demo22. py
try: print["try block"] print[10/0] except NameError: print["except block"] finally: print["finally block"]
đầu ra
Nếu một ngoại lệ được đưa ra nhưng không được xử lý, thì chương trình phải chấm dứt bất thường. Nhưng trước khi kết thúc, khối cuối cùng sẽ được thực thi
Các trường hợp luồng điều khiển khác nhau của thử ngoại trừ cuối cùng trong pythonTrường hợp 1Nếu không có ngoại lệ, thì hãy thử và cuối cùng các khối sẽ thực thi và khối ngoại trừ sẽ không thực thi, dẫn đến kết thúc bình thường
Chương trình. demo23. py
print["One"] print["Two"] try: print["try block"] except ZeroDivisionError: print["except block: Handling code"] finally: print["finally block: clean-up activities"] print["Four"]
đầu ra
Nếu một ngoại lệ được đưa ra bên trong khối thử và khối ngoại trừ đang xử lý ngoại lệ tương ứng đó thì các khối thử, ngoại trừ và cuối cùng sẽ thực thi, dẫn đến kết thúc bình thường
Chương trình. demo24. py
print["One"] print["Two"] try: print["try block"] print[10/0] except ZeroDivisionError: print["except block: Handling code"] finally: print["finally block: clean-up activities"] print["Four"]
đầu ra
Nếu một ngoại lệ được đưa ra bên trong khối thử và khối ngoại trừ không xử lý ngoại lệ tương ứng đó thì các khối thử và cuối cùng sẽ thực thi, dẫn đến kết thúc bất thường
Chương trình. demo25. py
print["One"] print["Two"] try: print["try block"] print[10/0] except NameError: print["except block: Handling code"] finally: print["finally block: clean-up activities"] print["Four"]
đầu ra
Trong chương trình trên, vì nó kết thúc bất thường nên câu lệnh in sau [print[“Four”]] khối cuối cùng không được thực thi
Trường hợp 4Nếu một ngoại lệ được đưa ra bên trong khối thử, thì luồng sẽ chuyển sang khối ngoại trừ. Và trong khối ngoại trừ, giả sử, ngoại lệ cụ thể được xử lý. Thay vì xử lý ngoại lệ, nếu khối đó tự phát sinh ngoại lệ khác thì chương trình sẽ kết thúc bất thường. Trong trường hợp này cũng vậy, trước khi kết thúc chương trình, khối finally sẽ được thực thi
Chương trình. demo26. py
print["One"] print["Two"] try: print["try block"] print[10/0] except ZeroDivisionError: print[10/0] finally: print["finally block: clean-up activities"] print["Four"]
đầu ra
Nếu một ngoại lệ được đưa ra bên trong khối cuối cùng, thì đó luôn là sự chấm dứt bất thường
Chương trình. demo27. py
________số 8_______đầu ra
Trong bài viết tiếp theo, tôi sẽ thảo luận về các khối try-ngoại trừ cuối cùng lồng nhau trong Python với các ví dụ. Ở đây, trong bài viết này, tôi cố gắng giải thích Cuối cùng Chặn trong Python bằng các ví dụ. Tôi hy vọng bạn thích bài viết Cuối cùng về khối trong Python với các ví dụ này. Tôi muốn có phản hồi của bạn. Vui lòng gửi phản hồi, câu hỏi hoặc nhận xét của bạn về bài viết này