首頁 >后端開發 >Python教程 > 正文

python處理異常有哪些方式

原創2019-06-17 09:38:0501318
phpStudy Linux 面板(小皮面板)
異常處理的用法:為了保證程序的健壯性與容錯性,即在遇到錯誤時候程序不會崩潰,我們需要對異常進行處理,

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 = '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)
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('類型錯誤')
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('類型錯誤')
except Networkerror as e:
    print(e)

8,斷言:assert條件

assert 1 == 1 
assert 1 == 2

9,總結try...except

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

2,代碼更易組織,更清晰,復雜的工作任務更容易實現

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

以上就是python處理異常有哪些方式的詳細內容,更多請關注php中文網其它相關文章!

php中文網最新課程二維碼
  • 相關標簽:Python
  • 本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
  • 相關文章

    相關視頻


    網友評論

    文明上網理性發言,請遵守 新聞評論服務協議

    我要評論
  • 專題推薦

    作者信息
    推薦視頻教程
  • Python實戰爬蟲視頻教程Python實戰爬蟲視頻教程
  • Python教程之Tkinter視頻教程Python教程之Tkinter視頻教程
  • Python進階視頻教程Python進階視頻教程
  • python編程入門系列圖文教程python編程入門系列圖文教程
  • 視頻教程分類
    足彩吧合买平台