Python中的錯誤處理
在本文中,我們將說明Python中的錯誤處理。
YouTube Video
Python中的錯誤處理
Python中的錯誤處理主要通過使用關鍵字try、except、else和finally來完成。使用這些結構可以讓您在程序出錯時作出適當的應對。下面,我們將說明如何使用它們中的每一個。
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區塊中檢測錯誤,並通過捕獲ValueError或ZeroDivisionError來適當處理它們。
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}")- 此程式碼示範如何同時捕獲
IndexError和ZeroDivisionError,並以相同的方式處理這些例外。
無條件攔截例外情況
如果希望在一個區塊中處理所有類型的例外情況,可以省略 except 的參數。
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")- 然而,處理特定例外而不是無條件捕獲所有例外,對於尋找臭蟲與除錯更加有幫助。在可能的情況下,僅明確處理預期的例外(例如
ValueError或TypeError),可以提升程式碼的穩健性。
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 頻道。