2024-01-20|閱讀時間 ‧ 約 27 分鐘

[Python基礎]處理例外(異常)try,except,else,finally語句

在程式設計中,最怕出現程式有異常造成崩潰,所以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:
# 無論是否引發例外,都會執行這裡的程式碼

程式範例

此範例為開啟檔案,我們將呈現三種不同成果

  1. 成功開啟檔案,並讀取內容,印出文件檔內容: 成功讀取
  2. 檔案不存在,印出Error: File '{file_path}' not found
  3. 開啟文件錯誤,印出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 常用於確保資源(如檔案、網路連接、數據庫連接等)在使用完畢後被正確地釋放或關閉。這樣可以避免資源泄漏。


謝謝大家觀看~ 希望大家會喜歡,喜歡的話可以給愛心~追蹤一下,不會漏掉之後的文章喔~






分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.