處理錯誤的方式非常重要。
Python提供了異常處理功能。
如果將一些代碼放在try:
區塊中:
try:
# 一些代碼
如果發生錯誤,Python將會提示您,您可以使用except
區塊來確定發生了哪種錯誤:
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except <錯誤2>:
# <錯誤2>的處理方式
如果要捕獲所有異常,您可以在except
中使用任何錯誤類型:
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except:
# 捕獲所有其他異常
如果沒有發生任何異常,則會執行else
區塊:
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except <錯誤2>:
# <錯誤2>的處理方式
else:
# 沒有發生異常,代碼順利執行
finally
區塊可以讓您在任何情況下執行某些操作,無論發生錯誤與否:
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except <錯誤2>:
# <錯誤2>的處理方式
else:
# 沒有發生異常,代碼順利執行
finally:
# 無論如何都要執行的操作
要發生的具體錯誤取決於您正在執行的操作。
例如,如果您正在讀取文件,可能會出現EOFError
。如果您將數字除以零,將會出現ZeroDivisionError
。如果有類型轉換問題,可能會出現TypeError
。
試試這段代碼:
result = 2 / 0
print(result)
程式將以錯誤結束:
Traceback (most recent call last):
File "main.py", line 1, in <module>
result = 2 / 0
ZeroDivisionError: division by zero
錯誤後的代碼將不會被執行。
將該操作放在try:
區塊中讓我們可以優雅地恢復並繼續執行程式:
try:
result = 2 / 0
except ZeroDivisionError:
print('無法除以零!')
finally:
result = 1
print(result) # 1
您也可以在自己的程式中引發異常,使用raise
語句:
raise Exception('發生了一個錯誤!')
這會引發一個一般的異常,您可以通過以下方式攔截它:
try:
raise Exception('發生了一個錯誤!')
except Exception as error:
print(error)
您還可以定義自己的異常類,繼承自Exception:
class DogNotFoundException(Exception):
pass
這裡的
pass
意味著“空操作”,當我們定義一個沒有方法的類別或沒有代碼的函式時,必須使用它。
try:
raise DogNotFoundException()
except DogNotFoundException:
print('狗狗找不到了!')