try-except-else-finally語句:
語法:
try:
try_suite
except Exception1:
suite_exception1
except (Exception2,Exception3):
suite23_exception23
...
else:
else_suite
finally:
finally_suite
可以替換爲在try-finally語句中嵌套try-except語句的形式
自定義異常:
raise語句可顯式觸發異常:
raise [SomeException [,args [,traceback]]]
SomeException:可選,異常的名字,僅能使用字符串、類或實例
args:可選,以元組的形式傳遞給異常的參數
traceback:可選,異常觸發時新生成的一個用於異常-正常化的跟蹤記錄,多用於重新引發異常時
異常對象:
- Python異常是內置的經典類Exception的子類的實例
- 爲了向後兼容,Python還允許使用字符串或任何經典類實例
- Python2.5之後,Exception是從BaseException繼承的新式類
- Python自身引發的所有異常都是Exception的子類的實例
- 大多的標準異常都是由StandardError派生的,其有3個抽象的子類:
- ArithmeticError
- 由於算術錯誤而引發的異常基類
- OverflowError, ZeroDivisionError, FloatingPointError
- LookupError
- 容器在接收到一個無效鍵或索引時引發的異常的基類
- IndexError,KeyError
- EnvironmentError
- 由於外部原因而導致的異常的基類
- IOError, OSError, WindowsError
標準異常類:
- AssertionError
- AttributeError
- FloatingPointError
- IOError
- ImportError
- import語句不能找到要導入的模塊,或者不能找到該模塊特別請求的名稱
- IndentationError
- IndexError
- KeyError
- KeyboardInterrupt
- 用戶按了中斷鍵(Ctrl+c,Ctrl+Break或Delete鍵)
- MemoryError
- NameError
- NotImplementedError
- 由抽象基類引發的異常,用於指示一個具體的子類必須覆蓋的一個方法
- OSError
- 由模塊os中的函數引發的異常,用來指示平臺相關的錯誤
- OverflowError
- SyntaxError
- SystemError
- TypeError
- UnboundLocalError
- UnicodeError
- ValueError
- 應用於某個對象的操作或函數,這個對象具有正確的類型,但確有不適當的值
- WindowsError
- 模塊os中的函數引發的異常,用來指示與Windows相關的錯誤
- ZeroDivisionError
自定義異常類:
自定義異常和多重繼承:
較有效的方法是從自定義異常類和標準異常類進行多重繼承,例如
class CustomAttributeError(CustomException,AttributeError):
pass
標準庫中使用的其他異常:
Python標準庫中的許多模塊都定義了自己的異常類,如socket中的socket.error
等同於自定義的異常類
assert語句:
assert語句用於在程序中引入調試代碼
assert condition[, expression]
如果condition條件滿足,則assert不做任何操作
如果condition條件不滿足,則assert使用expression作爲參數實例化AssertionError並引發結果實例
注意:
如果運行Python時使用了-O優化選項,則assert將是一個空操作:編譯器不爲assert語句生成代碼
運行Python時不使用-O選項,則__debug__內置變量爲True,否則其值爲False
assert語句相當於下面的代碼:
if __debug__:
if not condition:
raise AssertionError, <expression>