Python - try-except 程式碼塊



Python try-except 程式碼塊

在 Python 中,try-except 程式碼塊用於優雅地處理異常和錯誤,確保即使出現問題,程式也能繼續執行。本教程將介紹 try-except 程式碼塊的基本用法、語法和最佳實踐。

異常處理允許您透過捕獲異常並採取適當措施來管理程式碼中的錯誤,而不是讓程式崩潰。異常是在程式執行期間發生的錯誤,處理這些異常可以確保您的程式能夠響應意外情況。

Python 中的 try-except 程式碼塊用於捕獲和處理異常。可能導致異常的程式碼放在 try 程式碼塊中,處理異常的程式碼放在 except 程式碼塊中。

語法

以下是 Python 中 try-except 程式碼塊的基本語法:

try:
   # Code that might cause an exception
   risky_code()
except SomeException as e:
   # Code that runs if an exception occurs
   handle_exception(e)

示例

在這個例子中,如果您輸入非數字值,將會引發 ValueError。如果您輸入零,將會引發 ZeroDivisionError。except 程式碼塊會處理這些異常並列印相應的錯誤資訊:

try:
   number = int(input("Enter a number: "))
   result = 10 / number
   print(f"Result: {result}")
except ZeroDivisionError as e:
   print("Error: Cannot divide by zero.")
except ValueError as e:
   print("Error: Invalid input. Please enter a valid number.")

處理多個異常

在 Python 中,您可以使用單個 try-except 語句中的多個 except 程式碼塊來處理多種型別的異常。這允許您的程式碼對執行期間可能發生的各種錯誤做出不同的響應。

語法

以下是 Python 中處理多個異常的基本語法:

try:
   # Code that might raise exceptions
   risky_code()
except FirstExceptionType:
   # Handle the first type of exception
   handle_first_exception()
except SecondExceptionType:
   # Handle the second type of exception
   handle_second_exception()
# Add more except blocks as needed for other exception types

示例

在以下示例中:

  • 如果您輸入零作為除數,將會引發 "ZeroDivisionError",相應的 except ZeroDivisionError 程式碼塊將處理它並列印錯誤資訊。
  • 如果您為被除數或除數輸入非數字輸入,將會引發 "ValueError",except ValueError 程式碼塊將處理它並列印不同的錯誤資訊。

try:
   dividend = int(input("Enter the dividend: "))
   divisor = int(input("Enter the divisor: "))
   result = dividend / divisor
   print(f"Result of division: {result}")
except ZeroDivisionError:
   print("Error: Cannot divide by zero.")
except ValueError:
   print("Error: Invalid input. Please enter valid integers.")

在 Try-Except 塊中使用 Else 子句

在 Python 中,else 子句可以與 try-except 塊一起使用,以指定僅在 try 塊中沒有發生異常時才應執行的程式碼。這提供了一種方法來區分可能引發異常的主程式碼和僅在正常情況下才應執行的其他程式碼。

語法

以下是 Python 中 else 子句的基本語法:

try:
   # Code that might raise exceptions
   risky_code()
except SomeExceptionType:
   # Handle the exception
   handle_exception()
else:
   # Code that runs if no exceptions occurred
   no_exceptions_code()

示例

在以下示例中:

  • 如果輸入非整數,則會引發 ValueError,並且相應的 except ValueError 塊將處理它。
  • 如果輸入零作為分母,則會引發 ZeroDivisionError,並且相應的 except ZeroDivisionError 塊將處理它。
  • 如果除法成功(即沒有引發異常),則 else 塊將執行並列印除法的結果。
try:
   numerator = int(input("Enter the numerator: "))
   denominator = int(input("Enter the denominator: "))
   result = numerator / denominator
except ValueError:
   print("Error: Invalid input. Please enter valid integers.")
except ZeroDivisionError:
   print("Error: Cannot divide by zero.")
else:
   print(f"Result of division: {result}")

Finally 子句

finally 子句提供了一種機制,可以保證執行特定的程式碼,無論是否引發異常。這對於執行清理操作(例如關閉檔案或網路連線、釋放鎖或釋放資源)很有用。

語法

以下是 Python 中 finally 子句的基本語法:

try:
   # Code that might raise exceptions
   risky_code()
except SomeExceptionType:
   # Handle the exception
   handle_exception()
else:
   # Code that runs if no exceptions occurred
   no_exceptions_code()
finally:
   # Code that always runs, regardless of exceptions
   cleanup_code()

示例

在這個例子中:

  • 如果檔案“example.txt”存在,則讀取並列印其內容,並且 else 塊確認操作成功。
  • 如果找不到檔案(FileNotFoundError),則在 except 塊中列印相應的錯誤訊息。
  • finally 塊確保無論檔案操作成功與否或是否發生異常,都關閉檔案(file.close())。
try:
   file = open("example.txt", "r")
   content = file.read()
   print(content)
except FileNotFoundError:
   print("Error: The file was not found.")
else:
   print("File read operation successful.")
finally:
   if 'file' in locals():
      file.close()
   print("File operation is complete.")
廣告