處理錯誤的方式非常重要。

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('狗狗找不到了!')