Python 3 – 異常處理
在編寫Python程序時,難免會出現各種各樣的錯誤。愛掏網 - it200.com這些錯誤被稱為異常。愛掏網 - it200.com在Python中,異常處理是一種處理異常情況的技術。愛掏網 - it200.comPython提供了 try 和 except 分別用來捕捉和處理異常。愛掏網 - it200.com在本文中,我們將學習如何使用異常處理來增強我們程序的健壯性。愛掏網 - it200.com
在Python中,每個異常都是一個類(Exception的子類)。愛掏網 - it200.com當程序出現異常時,通常情況下,Python解釋器會創建一個異常類的實例來表示這個異常。愛掏網 - it200.com異常會通過堆棧向上追溯,直到找到異常處理程序處理它為止。愛掏網 - it200.com
以下是Python中常見的異常類型:
- AssertionError:斷言語句執行失敗。愛掏網 - it200.com
- AttributeError:嘗試訪問未知的對象屬性。愛掏網 - it200.com
- EOFError:沒有更多的輸入。愛掏網 - it200.com
- FloatingPointError:浮點計算錯誤。愛掏網 - it200.com
- GeneratorExit:generator.close() 方法被調用的時候拋出。愛掏網 - it200.com
- ImportError:導入模塊失敗的時候拋出。愛掏網 - it200.com
- IndexError:索引超出序列范圍。愛掏網 - it200.com
- KeyError:字典中查找一個不存在的關鍵字。愛掏網 - it200.com
- KeyboardInterrupt:用戶輸入中斷鍵 (Ctrl+C)。愛掏網 - it200.com
- MemoryError:內存溢出錯誤(對于Python解釋器不是致命的)。愛掏網 - it200.com
- NameError:嘗試訪問一個不存在的變量。愛掏網 - it200.com
- NotImplementedError:尚未實現的方法。愛掏網 - it200.com
- OSError:操作系統產生的異常(例如Open文件時發生錯誤)。愛掏網 - it200.com
- OverflowError:數值運算超出最大限制。愛掏網 - it200.com
- ReferenceError:嘗試訪問已經被垃圾回收機制回收的對象。愛掏網 - it200.com
- RuntimeError:一般運行時錯誤。愛掏網 - it200.com
- StopIteration:迭代器沒有更多的值。愛掏網 - it200.com
- SyntaxError:Python語法錯誤。愛掏網 - it200.com
- IndentationError:縮進錯誤。愛掏網 - it200.com
- TabError:Tab和空格混淆。愛掏網 - it200.com
- SystemError:一般的解釋器系統錯誤。愛掏網 - it200.com
- SystemExit:程序退出。愛掏網 - it200.com
- TypeError:不同類型間的無效操作。愛掏網 - it200.com
- UnboundLocalError:訪問一個未初始化的本地變量。愛掏網 - it200.com
- UnicodeError:Unicode相關的錯誤。愛掏網 - it200.com
- UnicodeEncodeError:Unicode編碼時錯誤。愛掏網 - it200.com
- UnicodeDecodeError:Unicode解碼時錯誤。愛掏網 - it200.com
- UnicodeTranslateError:Unicode轉換時錯誤。愛掏網 - it200.com
- ValueError:傳入無效的參數。愛掏網 - it200.com
- ZeroDivisionError:除數為0。愛掏網 - it200.com
2. try/except
try/except語句用于捕獲異常。愛掏網 - it200.com語法如下:
try:
# 可能會發生異常的代碼塊
except 異常類型1:
# 處理異常的代碼塊
except 異常類型2:
# 處理異常的代碼塊
...
else:
# 如果try代碼塊沒有異常,則執行else代碼塊。愛掏網 - it200.com
finally:
# 不管有沒有異常都會執行的代碼塊
以下是一個簡單的示例:
try:
a = 4/0
except ZeroDivisionError:
print("除數為0!")
在上面的例子中,我們嘗試將4除以0,會產生一個ZeroDivisionError,程序會跳到except塊并輸出“除數為0!”。愛掏網 - it200.com
如果您不確定會出現哪種異常,可以使用一個通用的except捕捉所有的異常:
try:
# 可能會發生異常的代碼塊
except Exception as e:
print(e)
在上面的例子中,我們使用Exception作為except塊的異常類型。愛掏網 - it200.com由于Exception是所有異常的基類,因此它可以捕獲所有類型的異常。愛掏網 - it200.com
你也可以同時捕捉多個異常類型:
try:
# 可能會發生異常的代碼塊
except (ValueError, TypeError):
# 處理這兩種異常的代碼塊
當我們需要在程序中執行一些清理操作時,可以使用finally塊。愛掏網 - it200.comfinally塊中的代碼是不管try塊中是否發生異常都會執行的。愛掏網 - it200.com
try:
# try塊中的代碼
except:
# 無論try塊中有沒有異常,都會執行這個塊
finally:
# 不管try塊中有沒有異常,都會執行這個塊
以下是一個使用finally塊的例子:
try:
f = open("file.txt", mode="r")
# 執行一些操作
finally:
f.close()
在上面的例子中,我們打開文件,并在try塊中編寫一些代碼來執行操作。愛掏網 - it200.com不管try塊中有沒有發生異常,我們都有一個finally塊,這個塊中包含了關閉打開的文件的代碼。愛掏網 - it200.com這種方法可以確保文件被正確地關閉,而不會因為一個異常而被遺漏。愛掏網 - it200.com
3. try/except…else
可以使用else塊來指定“try”塊中沒有發生異常時要執行的代碼:
try:
# 可能會發生異常的代碼塊
except Exception as e:
# 異常代碼塊
else:
# 如果try代碼塊沒有異常,則執行else代碼塊
以下是一個簡單的示例:
try:
a = 4/2
except ZeroDivisionError:
print("除數為0!")
else:
print("計算結果為:", a)
在上面的例子中,我們嘗試將4除以2,在這個過程中不會出現異常,因此程序會跳轉到else代碼塊,并輸出“計算結果為:2”。愛掏網 - it200.com