Trong Python, khối try-finally được sử dụng để đảm bảo rằng một số đoạn mã sẽ được thực thi, bất kể có xảy ra ngoại lệ hay không. Khác với khối try-except, khối try-finally tập trung vào các thao tác dọn dẹp cần phải diễn ra, đảm bảo rằng tài nguyên được giải phóng đúng cách và các nhiệm vụ quan trọng được hoàn thành.
Cú pháp của câu lệnh try-finally như sau −
try: # Code that might raise exceptions risky_code() finally: # Code that always runs, regardless of exceptions cleanup_code()
In Python, when using exception handling with try blocks, you have the option to include either except clauses to catch specific exceptions or a finally clause to ensure certain cleanup operations are executed, but not both together.
Hãy xem xét một ví dụ nơi chúng ta muốn mở một tệp trong chế độ ghi ("w"), ghi một số nội dung vào đó và đảm bảo rằng tệp được đóng lại bất kể thành công hay thất bại bằng cách sử dụng khối finally −
try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") finally: print ("Error: can\'t find file or read data") fh.close()
Nếu bạn không có quyền mở tệp ở chế độ ghi, thì nó sẽ tạo ra output −
Error: can't find file or read data
Ví dụ tương tự có thể được viết một cách rõ ràng hơn như sau −
try: fh = open("testfile", "w") try: fh.write("This is my test file for exception handling!!") finally: print ("Going to close the file") fh.close() except IOError: print ("Error: can\'t find file or read data")
Khi một ngoại lệ được ném ra trong khối try, quá trình thực thi ngay lập tức chuyển sang khối finally . Sau khi tất cả các câu lệnh trong khối finally được thực thi, ngoại lệ lại được ném ra và sẽ được xử lý trong các câu lệnh except nếu có ở tầng cao hơn trong câu lệnh try-except.
Một ngoại lệ có thể có một đối số, là một giá trị cung cấp thông tin bổ sung về vấn đề. Nội dung của đối số thay đổi tùy theo loại ngoại lệ. Bạn có thể bắt giữ đối số của một ngoại lệ bằng cách cung cấp một biến trong câu lệnh except như sau −
try: You do your operations here ...................... except ExceptionType as Argument: You can print value of Argument here...
Nếu bạn viết mã để xử lý một ngoại lệ đơn, bạn có thể có một biến theo sau tên của ngoại lệ trong câu lệnh except. Nếu bạn đang bắt nhiều ngoại lệ, bạn có thể có một biến theo sau tuple của các ngoại lệ.
Biến này nhận giá trị của ngoại lệ, chủ yếu chứa nguyên nhân của ngoại lệ. Biến này có thể nhận một giá trị đơn lẻ hoặc nhiều giá trị dưới dạng một tuple. Tuple này thường chứa chuỗi lỗi, số lỗi và vị trí lỗi.
Dưới đây là một ví dụ cho một ngoại lệ đơn lẻ −
# Define a function here. def temp_convert(var): try: return int(var) except ValueError as Argument: print("The argument does not contain numbers\n",Argument) # Call above function here. temp_convert("xyz")
Nó sẽ tạo ra output −
The argument does not contain numbers invalid literal for int() with base 10: 'xyz'