首頁 >後端開發 >Python教學 >python異常與錯誤區別

python異常與錯誤區別

藏色散人
藏色散人原創
2019-07-03 09:25:455210瀏覽

python異常與錯誤區別

錯誤與例外概念

#錯誤:

    1.文法錯誤:程式碼不符合解釋器或編譯器語法

    2.邏輯錯誤:不完整或不合法輸入或計算出現問題

#異常:執行過程中出現萬體導致程式無法執行

#    1.程式遇到邏輯或演算法問題

    2.運作過程中電腦錯誤(記憶體不夠或IO錯誤)

錯誤與異常差異

##錯誤:

    程式碼執行前的語法或邏輯錯誤,

    語法錯誤在執行前修改,邏輯錯誤無法修改

異常分為兩個步驟:

    1.異常產生,檢查到錯誤且解釋器認為是異常,拋出異常;

    2.異常處理,截獲異常,忽略或終止程序處理異常

Python 常見錯誤

常見錯誤:ipython下

    1. a : NameError

        在沒有定義變數的時候直接引用

    2. if True : SyntaxError

        語法錯誤

    3. f = open('1.txt') : IOError

        試圖開啟一個不存在的檔案的時候

#o    #    嘗試開啟一個不存在的檔案的時候

 #    4. 10/0 : ZeroDivisionError

    5. a = int('dd') : ValueError

        進行強制類型轉換的時候遇到的錯誤

try- -except異常處理(1) 

try-except:異常處理

try:
    try_suite
except Exception [, e]:
    exception_block

1.try用來捕捉try_suite中的錯誤,並且將錯誤交給except處理

# 2.except用來處理異常,如果異常處理和設定捕獲異常一致,使用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:可以捕獲異常,因為是運行時錯誤

case 2:不能捕獲異常,因為是語法錯誤,運行前錯誤

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:可以捕獲異常,因為設定捕獲NameError異常

case 4:不能捕獲異常,因為設定IOError,不會處理NameError

try--except異常處理(2)

try-except:處理多個例外

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

如果沒有異常,執行else語句中的代碼

try--finally語句

try-finally語句:

try:
    try_suite
finally:
    do_finally

1.如果try語句沒有捕獲錯誤,程式碼執行do_finally語句

2.如果try語句捕獲錯誤,程式首先執行do_finally語句,然後將捕獲到的錯誤交給python解釋器處理

#try-finally語句:

規則:try-finally無論是否偵測到異常,都會執行finally程式碼

作用:為例外處理事件提供清理機制,用來關閉檔案或釋放系統資源

try-except-finally使用:

try:
    try_suite
except:
    do_except
finally:
    do_finally

1.若try語句沒有捕獲異常,執行完try代碼段後,執行finally

2.若try捕獲異常,首先執行except處理錯誤,然後執行finally

try-except-else-finally使用:

try:
    try_suite
except:
    do_except
else:
    do_else
finally:
    do_finally
1.若try語句沒有捕獲異常,執行完try代碼塊後,執行else代碼塊,最後執行finally

2.若try捕獲異常,先執行except處理錯誤,然後執行finally

#with語句

with語句:

##with context [as var]:

    with_suite

1.with語句用來取代try-except-finally語句,是程式碼更簡潔;

2.context表達式回傳是一個物件;

3.var用來保存context返回對象,單一返回值或元祖;

4.with_suite使用var變數來對context返回對象進行操作

……

raise和assert

###raise語句######raise語句用於主動拋出例外######語法格式:raise [ exception [, args]]######exception: 異常類別######args: 描述異常訊息的元組######例:###
raise TypeError
raise TypeError, 'Test Error'
raise IOError, 'File Not Exist'
###assert語句### ###斷言語句:assert語句用來偵測表達式是否為真,如果為假,引發AssertionError錯誤;######語法格式:assert expression [, args]#######expression:表達式######args:判斷條件的描述資訊#####例:###
assert 7==6
assert 0, 'Test Error'
###Python標準與自訂例外狀況#####標準例外:python內建異常,程式執行前就已經存在######自訂異常:######1.python允許自訂異常,用於描述python中沒有涉及的異常情況######2.自訂異常必須繼承Exception類別######3.自訂例外只能主動觸發######自訂例外範例:###
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
###相關推薦:《###Python教學###》# ##

以上是python異常與錯誤區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn