在程式設計中,最怕出現程式有異常造成崩潰,所以Python有專門來處理這些異常(例外)的語句,try
, except
, else
, 和 finally
。
本文將介紹這些語句的使用方法,如何去使用及利用程式範例來更深刻的理解。
故意整數除0來引發異常
有此範例可以理解,有異常例外時except
會執行,接著執行finally
與後面的程式碼。
try:
result = 10 / 0 # 這裡會引發 ZeroDivisionError
except ZeroDivisionError:
print("不可除0")
else:# 如果沒提出例外,else就會執行
print("沒例外就會執行")
finally:
print("不管如何最後都會執行")
print("有無例外都會繼續執行後面流程")
#輸出
#不可除0
#不管如何最後都會執行
#有無例外都會繼續執行後面流程
沒有異常狀況會執行else
區塊,不管有無異常都會執行finally
try:
result = 10 / 2 # 這裡會引發 ZeroDivisionError
except ZeroDivisionError:
print("不可除0")
else:# 如果沒提出例外,else就會執行
print("沒例外就會執行")
finally:
print("不管如何最後都會執行")
print("有無例外都會繼續執行後面流程")
#輸出
#沒例外就會執行
#不管如何最後都會執行
#有無例外都會繼續執行後面流程
有上兩個範例,我們得知了以下重點:
try
try
塊包含可能引發例外的代碼,我們試圖在這裡執行可能出現異常的程式碼。
try:
# 可能引發例外的程式碼
except:
except
塊包含當 try
塊中的程式碼引發例外時應該執行的代碼。可以指定異常的類型,也可以使用 Exception
來捕捉所有類型的例外。
except SomeExceptionType:
# 對應的處理程序
except AnotherExceptionType:
# 對應的處理程序
except Exception as e:
# 通用的處理程序,e 包含例外的訊息
else:
else
塊包含當 try
塊中的程式碼沒有引發例外時應該執行的代碼。
else:
# 如果 try 塊中的程式碼沒有引發例外,執行這裡的程式碼
finally:
finally
塊包含在任何情況下都應該執行的代碼,不論是否引發了例外。即使 try
塊中的程式碼正常執行,finally
塊仍然會執行。
finally:
# 無論是否引發例外,都會執行這裡的程式碼
此範例為開啟檔案,我們將呈現三種不同成果
Error: File '{file_path}' not found
IOError: [Errno 22] Invalid argument: 'example.txt'
try:
# 嘗試打開文件
file_path = 'F:/python/opencv/example.txt'
with open(file_path, 'r') as file:
# 嘗試讀取文件內容
content = file.read()
print(f"File content: {content}")
except FileNotFoundError:
# 如果文件不存在,處理 FileNotFoundError
print(f"Error: File '{file_path}' not found.")
except IOError as e:
# 如果發生文件讀取或處理錯誤,處理 IOError
print(f"IOError: {e}")
else:
# 如果沒有發生例外,執行這部分程式碼
print("File read successfully.")
finally:
# 無論如何都會執行的清理動作,確保文件被正確關閉
if 'file' in locals():
file.close() # 確保檔案被關閉
print("Closing the file.")
雖然with語句用法就是讀取完或寫入完都會將檔案關閉,但主要我們在finally
加那一段主要是說明這段的主要用法是什麼。
最後在finally
程式區塊,執行的是資源清理概念: finally
常用於確保資源(如檔案、網路連接、數據庫連接等)在使用完畢後被正確地釋放或關閉。這樣可以避免資源泄漏。