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...