python的自定義異常

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)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容