異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行
關鍵字:try、except、finally、else、raise
python中捕捉異常模塊try/except,其中python中有一些自定義的異常,具體如下
AttributeError
調用不存在的方法引發的異常
EOFError
遇到文件末尾引發的異常`
ImportError
導入模塊出錯引發的異常
IndexError
列表越界引發的異常
IOError I/O
操作引發的異常,如打開文件出錯等
KeyError
使用字典中不存在的關鍵字引發的異常
NameError
使用不存在的變量名引發的異常
TabError
語句塊縮進不正確引發的異常
ValueError
搜索列表中不存在值引發的異常
ZeroDivisionError
除數為零引發的異常
try:
except Exception:
finally:
自定義異常
# 自定義異常類
class AgeError(Exception):
def __init__(self, age):
self.__age = age
# 重寫str方法
def __str__(self):
return "您傳入的年齡不滿足需求:age=%d" % self.__age
age =10
try:
raise AgeError(age)
except Exception as e:
print(e)
traceback.print_exc()
實現 通過 系統角度 打印後繼續執行
這樣捕捉到異常後程序還會繼續往後執行,如果不捕捉的話,那麼拋出該運行時異常程序則會中斷
注:實體類中 要有__enter__ __exit__函數,分別 負責初始化以及清理工作
if else 異常模式
try:
<語句> #運行別的代碼
except <名字>:
<語句> #如果在try部份引發了'name'異常
except <名字>,<數據>:
<語句> #如果引發了'name'異常,獲得附加的數據
else:
<語句> #如果沒有異常發生
多異常處理
...
except(ZeroDivisionError, TypeError, NameError):
...
try-finally 語句
任何情況下都會執行finall中的語句
try:
<語句>
finally:
<語句> #退出try時總會執行
raise
with as取代try-finally
要求
with所求值的對象必須有一個__enter__()方法,一個__exit__()方法
with 實體類 as 返回值
方法或函數體
class Sample:
def __enter__(self):
print("In __enter__()")
def __exit__(self, type, value, trace):
print("In __exit__()")
S=Sample()
with S as sample:
raise Exception("錯誤出現")
try:
c = 1 / 0
except Exception as e:
#收集出現的錯誤
info = sys.exc_info()
#跟蹤該錯誤信息,limit參數為打印跟蹤的條目
traceback.print_tb(info[2])
print(info)
補充一下 日志打印 用 log