guxh的python筆記十一 異常處理

2022-08-19 02:48:15 字數 1743 閱讀 5650

1,抓錯方法

name = [0, 1, 2]

try:

name[3]

except indexerror as exc: # 抓單個錯誤,列印錯誤資訊e

print(exc)

except (indexerror, keyerror) as exc: # 同時抓多個錯誤,不推薦!!

print(exc)

except exception as exc: # 抓所有錯誤

print(exc)

else:

print('一切正常') # 一切正常時執行

finally:

print('不管有錯沒錯,都執行') # 總是執行

1.1,順序抓多個錯誤

先匹配的先執行:

try:

f = open('missing')

except oserror: # 先執行oserror

print('it failed')

except filenotfounderror:

print('file not found')

可以用mro列印異常的類層次結構:

>>>filenotfounderror.__mro__  # 或filenotfounderror.mro()

[, , , , ]

1.2,重新丟擲上乙個異常

try:

int('n/a')

except valueerror as e:

print("didn't work:", e)

raise # 用raise重新丟擲上乙個異常

#didn't work: invalid literal for int() with base 10: 'n/a'

#valueerror: invalid literal for int() with base 10: 'n/a'

2,常見錯誤

3,自定義異常

自定義異常並呼叫該異常:

class myexception(exception):

def __init__(self, msg):

self.message = msg

def __str__(self):

return self.message

raise myexception('not a valid password') # 呼叫自定義異常

繼承現有異常並呼叫該異常:

class addressvalueerror(valueerror):

"""a value error related to the netmask."""

raise addressvalueerror('not a valid address') # 呼叫繼承了valueerror異常的自定義異常

4,斷言assert

assert type(obj.name) is str  # 如果obj.name確實是str就繼續往下走,否則報錯

如果後面的程式很重要,就可以用斷言

和if效果差不多,但是assert會報錯,if不會報錯而且還要寫好幾句

guxh的python筆記七 抽象基類

1,鴨子型別和白鵝型別 1.1,白鵝型別 白鵝型別對介面有明確定義,比如不可變序列 sequence 需要實現 contains iter len getitem reversed index,count。對於其中的抽象方法,子類在繼承時必須具體化,其餘非抽象方法在繼承時可以自動獲得,sequenc...

python筆記 十一

open file,mode r buffering 1,encoding none,errors none,newline none,closefd true,opener false mode r 唯讀 w 可寫 會清除檔案內容 a 附加資料 b 二進位制資料模式 x 新建乙個檔案 可寫 開啟檔...

《Python程式設計》筆記(十一)

常規繪製 實際返回的id是數字 id canvas.create line from x,from y,to x,to y id canvas.create oval from x,from y,to x,to y id canvas.create arc from x,from y,to x,to...