1.拋出自定義的異常
? ? ? ? 你可以用raise語句來引發(fā)一個異常。異常/錯誤對象必須有一個名字,且它們應是Error或Exception類的子類。
? ? ? ? 我們自定義異常的原因是:因為系統(tǒng)提供的異常類,無法描述我的異常。我需要自定義一些異常類,來描述我所出現(xiàn)的異常。
1.1 例子如下
第一個例子:
class NameShortException(Exception):
? ? ? ? ? ? ? def __init__(self,msg,num):
? ? ? ? ? ? ? ? ? ? ? ? ? ? self.msg = msg
? ? ? ? ? ? ? ? ? ? ? ? ? ?self.num = num
def f():
'''這是輸入姓名并判斷,如果姓名的長度小于3,拋出NameShortException異常'''
? ? ? ? ? ? name = input('請輸入姓名:')
? ? ? ? ? ? if len(name.strip())<3:
#手動拋出一個異常對象,以后的代碼不再運行
? ? ? ? ? ? ? ? ? ? ? ? ? ? raise NameShortException('名字的長度至少是3',len(name.strip()))
? ? ? ? ? ?print('f......')
def main():
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? ?f()
? ? ? ? ? ?except Exception as ex:
? ? ? ? ? ? ? ? ? ? print('錯誤信息是:%s,輸入的字符串長度是:%s'%(ex.msg,ex.num))
? ? ? ? ? print('其它代碼。。。。。。。')
main()
第二個例子:
class SexException(Exception):
? ? ? ? ? ? ?def __init__(self,msg,value):
? ? ? ? ? ? ? ? ? ? ? ? ? self.msg = msg
? ? ? ? ? ? ? ? ? ? ? ? ? self.value = value
def f():
? ? ? ? ? ? ? sex = input('請輸入性別:')
? ? ? ? ? ? ? ?if sex!='男' and sex!='女':
? ? ? ? ? ? ? ? ? ? ? ? ? ?raise SexException('性別只能輸入男或者女',sex)
? ? ? ? ? ? ? ?print('f...over.....')
def main():
? ? ? ? ? ? ? ? ?try:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?f()
? ? ? ? ? ? ? ?except Exception as ex:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print('錯誤信息是:%s,輸入的性別是:%s'%(ex.msg,ex.value))
? ? ? ? ? ? ? ?print('其它代碼。。。。。。。')
main()
1.2 注意事項
以后在mvc框架中,都會有異常處理。在最外層進行處理。
try:
? ? ? ? ? ?#你寫的代碼
except Exception as ex:
? ? ? ? ? #將異常信息寫到日志文件中
else:
finally:
print('over......')
所以,你寫的代碼可以處理異常,也可以不處理。
一般要寫一定的異常處理,為了讓代碼繼續(xù)運行。
還有,可以將異常繼續(xù)拋出。為了讓系統(tǒng)異常日志記錄下來。
例如:
class SexException(Exception):
? ? ? ? ? ? ? def __init__(self,msg,value):
? ? ? ? ? ? ? ? ? ? ? ? ? ?self.msg = msg
? ? ? ? ? ? ? ? ? ? ? ? ? ?self.value = value
def f1():
? ? ? ? ? ? sex = input('請輸入性別:')
? ? ? ? ? ? if sex!='男' and sex!='女':
? ? ? ? ? ? ? ? ? ? ? ? ?raise SexException('性別只能輸入男或者女',sex)
? ? ? ? ? ? print('f1...over.....')
def f2():
? ? ? ? ? ? #num? = 1/0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# raise ZeroxxxError('除以0 了,不行')
? ? ? ? ? ? f1()
? ? ? ? ? ? print('f2...over.....')
def main():
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? ? ? ? f2()
? ? ? ? ? ? ? ?except Exception as ex:
? ? ? ? ? ? ? ? ? ? ? ? ?#print(ex.msg)
? ? ? ? ? ? ? ? ? ? ? ? ?raise
? ? ? ? ? ? ?print('main...over.....')
#框架
try:
? ? ? ? ? ? ? #你的代碼
? ? ? ? ? ? ? main()
except Exception as ex:
? ? ? ? ? ? ? #將錯誤信息寫到文件中記錄下來,打印模擬記錄
? ? ? ? ? ? ?print(ex)