首頁  >  文章  >  後端開發  >  python處理異常有哪些方式

python處理異常有哪些方式

anonymity
anonymity原創
2019-06-17 09:38:053565瀏覽

異常處理的用法:為了確保程式的健全性與容錯性,即在遇到錯誤時程式不會崩潰,我們需要對異常進行處理,

python處理異常有哪些方式

#1,如果錯誤發生的條件是可預測的,我們需要用if進行處理,在錯誤發生之前進行預防

AGE=10
while True:
    age=input('>>: ').strip()
    if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
        age=int(age)
        if age == AGE:
            print('you got it')
            break

2,如果錯誤發生的條件是不可預測的,則需要用到try..except:在錯誤發生之後進行處理

#基本語法為

try:

    被偵測的程式碼區塊

#except 異常類型:

    try中一旦偵測到異常,就執行這個位置的邏輯

#举例
try:
    f=open('a.txt')
    g=(line.strip() for line in f)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
except StopIteration:
    f.close()

五,try...except...的詳細用法

#我們把可能發生錯誤的語句放在try模組裡,用except來處理異常。 except可以處理一個專門的異常,也可以處理一組圓括號中的異常,如果except後沒有指定異常,則預設處理所有的異常。每一個try,都必須至少有一個except

1,例外類別只能來處理指定的例外狀況,如果非指定例外則無法處理

s1 = 'hello'
try:
    int(s1)
except IndexError as e: # 未捕获到异常,程序直接报错
    print e

2,多分支

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

3,萬能異常Exception

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)

4,多分支+Exception

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:
    print(e)

5,異常的其他機構(try...finally語法)

  try. ..finally語句無論是否發生異常都會執行最後的程式碼。語法如下:

try:
<语句>
finally:
<语句>    #退出try时总会执行
raise

 範例:

s1 = &#39;hello&#39;
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else:
    print('try内代码块没有异常则执行我')
finally:
    print('无论异常与否,都会执行该模块,通常是进行清理工作')

6,主動觸發異常(raise語句)

  我們可以使用raise語句自己觸發異常,raise語法格式如下:

raise [Exception [, args [, traceback]]]

  語句中Exception是例外的型別(例如,NameError)參數是一個例外參數值。此參數是可選的,如果不提供,異常的參數是"None"。

最後一個參數是可選的(在實踐中很少使用),如果存在,則是追蹤異常物件。

範例:

一個異常可以是一個字串,類別或物件。 Python的核心提供的異常,大多數都是實例化的類,這是一個類別的實例的參數。

定義一個異常非常簡單,如下所示:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行
try:
    raise TypeError(&#39;类型错误&#39;)
except Exception as e:
    print(e)

7,自訂異常

  透過建立一個新的異常類,程式可以命名它們自己的異常。異常應該是典型的繼承自Exception類,透過直接或間接的方式。

  以下為與BaseException相關的實例,實例中建立了一個類,基類為BaseException,用於在異常觸發時輸出更多的資訊。

  在try語句區塊中,使用者自訂的例外後執行except區塊語句,變數 e 是用來建立Networkerror類別的實例。

class Networkerror(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg
 
try:
    raise Networkerror(&#39;类型错误&#39;)
except Networkerror as e:
    print(e)

8,斷言:assert條件

assert 1 == 1 
assert 1 == 2

9,總結try...except

1,把錯誤處理和真正的工作分開來

 

2,程式碼更容易組織,更清晰,複雜的工作任務更容易實現

 

3,毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了

以上是python處理異常有哪些方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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