Computer >> Máy Tính >  >> Lập trình >> Python

Định nghĩa các hành động dọn dẹp bằng Python


Có rất nhiều tình huống xảy ra khi chúng ta muốn chương trình của mình thực hiện tác vụ cụ thể này, bất kể nó chạy hoàn hảo hay bị lỗi. Hầu hết để phát hiện bất kỳ lỗi hoặc ngoại lệ nào, chúng tôi sử dụng để thử và loại trừ khối.

Câu lệnh "try" cung cấp mệnh đề tùy chọn rất hữu ích để xác định "hành động dọn dẹp" phải được thực hiện trong bất kỳ trường hợp nào. Ví dụ -

>>> try:
   raise SyntaxError
finally:
   print("Learning Python!")
Learning Python!
Traceback (most recent call last):
   File "<pyshell#11>", line 2, in <module>
      raise SyntaxError
   File "<string>", line None
SyntaxError: <no detail available>

Mệnh đề cuối cùng sẽ thực thi bất kể điều gì, tuy nhiên, mệnh đề khác chỉ thực thi nếu một ngoại lệ không được nêu ra.

Ví dụ1 - Hãy xem xét ví dụ dưới đây, trong đó mọi thứ đều ổn và việc ghi vào tệp không có ngoại lệ (chương trình đang hoạt động), sẽ xuất như sau -

file = open('finally.txt', 'w')
try:
   file.write("Testing1 2 3.")
   print("Writing to file.")
except IOError:
   print("Could not write to file.")
else:
   print("Write successful.")
finally:
   file.close()
   print("File closed.")

Khi chạy chương trình trên, sẽ nhận được -

Writing to file.
Write successful.
File closed.

Ví dụ 2 - Hãy cố gắng nâng cao một ngoại lệ bằng cách đặt một tệp ở chế độ chỉ đọc và cố gắng ghi vào tệp đó, do đó khiến tệp tăng một ngoại lệ.

file = open('finally.txt', 'r')
try:
   file.write("Testing1 2 3.")
   print("Writing to file.")
except IOError:
   print("Could not write to file.")
else:
   print("Write successful.")
finally:
   file.close()
   print("File closed.")

Chương trình trên sẽ đưa ra một đầu ra, giống như -

Could not write to file.
File closed.

Trong trường hợp chúng ta có lỗi mà chưa đưa ra điều khoản ngoại trừ nào để xử lý. Trong trường hợp như vậy, hành động dọn dẹp (khối cuối cùng) sẽ được thực hiện đầu tiên và sau đó lỗi được trình biên dịch đưa ra. Hãy hiểu khái niệm này với ví dụ dưới đây -

Ví dụ

file = open('finally.txt', 'r')
try:
   file.write(4)
   print("Writing to file.")
except IOError:
   print("Could not write to file.")
else:
   print("Write successful.")
finally:
   file.close()
   print("File closed.")

Đầu ra

File closed.
Traceback (most recent call last):
   File "C:/Python/Python361/finally_try_except1.py", line 4, in <module>
      file.write(4)
TypeError: write() argument must be str, not int

Vì vậy, từ trên, chúng ta có thể thấy rằng, cuối cùng, mệnh đề thực thi luôn luôn, bất kể có ngoại lệ xảy ra hay không.