溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python異常與錯(cuò)誤區(qū)別是什么

發(fā)布時(shí)間:2020-09-10 10:17:13 來(lái)源:億速云 閱讀:281 作者:小新 欄目:編程語(yǔ)言

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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI