/

Python例外處理

Python例外處理

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

Python提供了異常處理功能。

如果將一些代碼放在try:區塊中:

1
2
try:
# 一些代碼

如果發生錯誤,Python將會提示您,您可以使用except區塊來確定發生了哪種錯誤:

1
2
3
4
5
6
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except <錯誤2>:
# <錯誤2>的處理方式

如果要捕獲所有異常,您可以在except中使用任何錯誤類型:

1
2
3
4
5
6
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except:
# 捕獲所有其他異常

如果沒有發生任何異常,則會執行else區塊:

1
2
3
4
5
6
7
8
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except <錯誤2>:
# <錯誤2>的處理方式
else:
# 沒有發生異常,代碼順利執行

finally區塊可以讓您在任何情況下執行某些操作,無論發生錯誤與否:

1
2
3
4
5
6
7
8
9
10
try:
# 一些代碼
except <錯誤1>:
# <錯誤1>的處理方式
except <錯誤2>:
# <錯誤2>的處理方式
else:
# 沒有發生異常,代碼順利執行
finally:
# 無論如何都要執行的操作

要發生的具體錯誤取決於您正在執行的操作。

例如,如果您正在讀取文件,可能會出現EOFError。如果您將數字除以零,將會出現ZeroDivisionError。如果有類型轉換問題,可能會出現TypeError

試試這段代碼:

1
2
result = 2 / 0
print(result)

程式將以錯誤結束:

1
2
3
4
Traceback (most recent call last):
File "main.py", line 1, in <module>
result = 2 / 0
ZeroDivisionError: division by zero

錯誤後的代碼將不會被執行。

將該操作放在try:區塊中讓我們可以優雅地恢復並繼續執行程式:

1
2
3
4
5
6
7
8
try:
result = 2 / 0
except ZeroDivisionError:
print('無法除以零!')
finally:
result = 1

print(result) # 1

您也可以在自己的程式中引發異常,使用raise語句:

1
raise Exception('發生了一個錯誤!')

這會引發一個一般的異常,您可以通過以下方式攔截它:

1
2
3
4
try:
raise Exception('發生了一個錯誤!')
except Exception as error:
print(error)

您還可以定義自己的異常類,繼承自Exception:

1
2
class DogNotFoundException(Exception):
pass

這裡的pass意味著“空操作”,當我們定義一個沒有方法的類別或沒有代碼的函式時,必須使用它。

1
2
3
4
try:
raise DogNotFoundException()
except DogNotFoundException:
print('狗狗找不到了!')

tags: [“exception handling”, “try-except”, “error handling”]