#異常發(fā)生后 程序就結(jié)束了
#若輸入一個(gè)字母 則拋出一個(gè)異常
#opt =int( input('輸入整數(shù)'))
#print(opt)
#except Type:處理指定類型的異常
#except (Type1,Type2,Type3):同時(shí)處理這三種異常
#若想獲得異常數(shù)據(jù),仍可使用as語(yǔ)句
opt =None
try:
opt = int(input('輸入整數(shù)'))
except (ValueError,KeyError):#所有的錯(cuò)誤都會(huì)以此為出口 處理所有異常
print('你輸入的不是一個(gè)數(shù)')
'''
只是值錯(cuò)誤的出口
except ValueError as e:
print(e)
'''
print(opt)
"""
try :
pass
except 異常類型1:
pass
except 異常類型2:
pass
except (yichang1,2,3):
pass
"""
定義這種方式捕捉異常時(shí),一定要先寫具體的異常,再寫普遍性的異常
所有的異常,繼承自Exception
#try :
#except:
#發(fā)生異常時(shí)執(zhí)行
#else:
#未發(fā)生異常時(shí)執(zhí)行
#finally;
# 有無(wú)異常均會(huì)執(zhí)行
#可以只有try。。finally 語(yǔ)句
#finally 一般用于釋放資源
#異常的傳遞
#異常發(fā)生后會(huì)傳遞給方法(函數(shù))的調(diào)用者A 若A有捕捉到該異常 則按捕捉機(jī)制處理
#否則會(huì)層層上傳 傳遞到程序的起始方法(函數(shù))
#最終會(huì)傳遞到python解析器 報(bào)錯(cuò) 此時(shí)就簡(jiǎn)單的終止程序
"""
def func1():
a=0
print(4/a)
def func2():
try:
func1()
except:
print('除數(shù)不為0')
func2()
#手動(dòng)拋出異常raise
def func3():
print('hhh')
raise ZeroDivisionError()
func3()
"""
自定義異常
class ParamInvalidException(Exception):
def __init__(self,code,msg):
self.code=code
self.msg=msg
def login(username,pwd):
if len(username)<6:
raise ParamInvalidException(100,'用戶名長(zhǎng)度小于6')
if username !='zs':
raise ParamInvalidException(101,'用戶名錯(cuò)誤')
print('登錄成功')
try:
login('zs',78)
print('ddd')
except ParamInvalidException as e:
print (e.code,e.msg)
raise e
程序發(fā)生異常的處理:
是否是可控的 ?無(wú)論是否可控,先記錄一下 若不可控 則忽略不管
若可控
try :
pass
except Exception:
#先記錄異常
#能處理則處理 若不能處理 raise
pass