Python中的錯誤處理

Python中的錯誤處理

在本文中,我們將說明Python中的錯誤處理。

YouTube Video

Python中的錯誤處理

Python中的錯誤處理主要通過使用關鍵字tryexceptelsefinally來完成。使用這些結構可以讓您在程序出錯時作出適當的應對。下面,我們將說明如何使用它們中的每一個。

try區塊

try區塊中,您編寫想要執行的代碼。如果在此區塊中發生錯誤,程序執行會立即轉到except區塊。

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • 此程式碼示例了如何在 try 區塊中檢測錯誤,並通過捕獲 ValueErrorZeroDivisionError 來適當處理它們。

except區塊

except區塊中,您編寫在發生特定異常(錯誤)時將被執行的代碼。您還可以根據發生的異常類型來捕捉特定的異常。

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • 此程式碼說明了當 try 區塊發生錯誤時,如何在 except 區塊中針對每種類型的例外進行不同的處理。

一起處理多個例外情況

當多個例外類別可以共用相同的處理邏輯時,請指定一個元組。

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • 此程式碼示範如何同時捕獲 IndexErrorZeroDivisionError,並以相同的方式處理這些例外。

無條件攔截例外情況

如果希望在一個區塊中處理所有類型的例外情況,可以省略 except 的參數。

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • 然而,處理特定例外而不是無條件捕獲所有例外,對於尋找臭蟲與除錯更加有幫助。在可能的情況下,僅明確處理預期的例外(例如 ValueErrorTypeError),可以提升程式碼的穩健性。

else區塊

else區塊僅在try區塊中未發生錯誤時執行。

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • 此程式碼說明了只有在 try 區塊沒有發生錯誤時,else 區塊才會被執行。

finally區塊

finally區塊用於編寫無論try區塊中是否發生錯誤都會在最後執行的代碼。它對於釋放資源或執行清理任務非常有用。

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • 此程式碼示範 finally 區塊不論是否發生例外都會被執行。

raise 關鍵字

當現有程式碼中的某些條件未滿足時,也可以使用 raise 關鍵字引發例外。

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • 此程式碼為當條件不符合時,使用 raise 關鍵字明確拋出例外的範例。

結論

以這種方式處理錯誤,您可以防止程序崩潰,向用戶顯示適當的信息,並繼續進行後續的程序處理。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video