您好,登錄后才能下訂單哦!
python異常與錯(cuò)誤區(qū)別是什么?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
錯(cuò)誤和異常概念
錯(cuò)誤:
1.語(yǔ)法錯(cuò)誤:代碼不符合解釋器或者編譯器語(yǔ)法
2.邏輯錯(cuò)誤:不完整或者不合法輸入或者計(jì)算出現(xiàn)問(wèn)題
異常:執(zhí)行過(guò)程中出現(xiàn)萬(wàn)體導(dǎo)致程序無(wú)法執(zhí)行
1.程序遇到邏輯或者算法問(wèn)題
2.運(yùn)行過(guò)程中計(jì)算機(jī)錯(cuò)誤(內(nèi)存不夠或者IO錯(cuò)誤)
錯(cuò)誤和異常區(qū)別
錯(cuò)誤:
代碼運(yùn)行前的語(yǔ)法或者邏輯錯(cuò)誤,
語(yǔ)法錯(cuò)誤在執(zhí)行前修改,邏輯錯(cuò)誤無(wú)法修改
異常分為兩個(gè)步驟:
1.異常產(chǎn)生,檢查到錯(cuò)誤且解釋器認(rèn)為是異常,拋出異常;
2.異常處理,截獲異常,忽略或者終止程序處理異常
Python常見(jiàn)錯(cuò)誤
常見(jiàn)錯(cuò)誤:ipython下
1. a : NameError
在沒(méi)有定義一個(gè)變量的時(shí)候直接引用
2. if True : SyntaxError
語(yǔ)法錯(cuò)誤
3. f = open('1.txt') : IOError
試圖打開(kāi)一個(gè)不存在的文件的時(shí)候
4. 10/0 : ZeroDivisionError
5. a = int('dd') : ValueError
進(jìn)行強(qiáng)制類型轉(zhuǎn)換的時(shí)候遇到的錯(cuò)誤
try--except異常處理(1)
try-except:異常處理
try: try_suite except Exception [, e]: exception_block
1.try用來(lái)捕獲try_suite中的錯(cuò)誤,并且將錯(cuò)誤交給except處理
2.except用來(lái)處理異常,如果異常處理和設(shè)置捕獲異常一致,使用exception_block處理異常
例:
try: a except Exception, e: print e
try-except捕獲異常分析:
Case 1:
try: undef except: print 'catch an except'
Case 2:
try: if undef except: print 'catch an except'
case 1:可以捕獲異常,因?yàn)槭沁\(yùn)行時(shí)錯(cuò)誤
case 2:不能捕獲異常,因?yàn)槭钦Z(yǔ)法錯(cuò)誤,運(yùn)行前錯(cuò)誤
Case 3:
try: undef except NameError, e: print 'catch an except', e Case 4: try: undef except IOError, e: print 'catch an except', e
case 3:可以捕獲異常,因?yàn)樵O(shè)置捕獲NameError異常
case 4:不能捕獲異常,因?yàn)樵O(shè)置IOError,不會(huì)處理NameError
try--except異常處理(2)
try-except:處理多個(gè)異常
try: try_suite except Exception1 [e]: exception_block1 except Exception2 [e]: exception_block2 except ExceptionN [e]: exception_blockN
try-except--else使用
try: try_suite except Exception1 [e]: exception_block1 else: none_exception
如果沒(méi)有異常,執(zhí)行else語(yǔ)句中的代碼
try--finally語(yǔ)句
try-finally語(yǔ)句:
try: try_suite finally: do_finally
1.如果try語(yǔ)句沒(méi)有捕獲錯(cuò)誤,代碼執(zhí)行do_finally語(yǔ)句
2.如果try語(yǔ)句捕獲錯(cuò)誤,程序首先執(zhí)行do_finally語(yǔ)句,然后將捕獲到的錯(cuò)誤交給python解釋器處理
try-finally語(yǔ)句:
規(guī)則:try-finally無(wú)論是否檢測(cè)到異常,都會(huì)執(zhí)行finally代碼
作用:為異常處理事件提供清理機(jī)制,用來(lái)關(guān)閉文件或者釋放系統(tǒng)資源
try-except-finally使用:
try: try_suite except: do_except finally: do_finally
1.若try語(yǔ)句沒(méi)有捕獲異常,執(zhí)行完try代碼段后,執(zhí)行finally
2.若try捕獲異常,首先執(zhí)行except處理錯(cuò)誤,然后執(zhí)行finally
try-except-else-finally使用:
try: try_suite except: do_except else: do_else finally: do_finally
1.若try語(yǔ)句沒(méi)有捕獲異常,執(zhí)行完try代碼塊后,執(zhí)行else代碼塊,最后執(zhí)行finally
2.若try捕獲異常,首先執(zhí)行except處理錯(cuò)誤,然后執(zhí)行finally
with語(yǔ)句
with語(yǔ)句:
with context [as var]:
with_suite
1.with語(yǔ)句用來(lái)代替try-except-finally語(yǔ)句,是代碼更加簡(jiǎn)潔;
2.context表達(dá)式返回是一個(gè)對(duì)象;
3.var用來(lái)保存context返回對(duì)象,單個(gè)返回值或者元祖;
4.with_suite使用var變量來(lái)對(duì)context返回對(duì)象進(jìn)行操作
……
raise和assert
raise語(yǔ)句
raise語(yǔ)句用于主動(dòng)拋出異常
語(yǔ)法格式:raise [exception [, args]]
exception: 異常類
args: 描述異常信息的元組
例:
raise TypeError raise TypeError, 'Test Error' raise IOError, 'File Not Exist'
assert語(yǔ)句
斷言語(yǔ)句:assert語(yǔ)句用于檢測(cè)表達(dá)式是否為真,如果為假,引發(fā)AssertionError錯(cuò)誤;
語(yǔ)法格式:assert expression [, args]
expression:表達(dá)式
args:判斷條件的描述信息
例:
assert 7==6 assert 0, 'Test Error'
Python標(biāo)準(zhǔn)和自定義異常
標(biāo)準(zhǔn)異常:python內(nèi)建異常,程序執(zhí)行前就已經(jīng)存在
自定義異常:
1.python允許自定義異常,用于描述python中沒(méi)有涉及的異常情況
2.自定義異常必須繼承Exception類
3.自定義異常只能主動(dòng)觸發(fā)
自定義異常示例:
class FileError(IOError): pass raise FileError, 'Test FileError' class CustomError(Exception): def __init__(self, info): Exception.__init__(self) self.errorinfo = info def __str__(self): return 'CustomError: %s' % self.errorinfo try: raise CustomError('test CustomError') except CustomError, e: print 'Error Info : %s' % e
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)python異常與錯(cuò)誤區(qū)別是什么大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。