【python學習筆記】Python異常處理raise、try...except、斷言assert

說明

寫代碼時,我們有時希望捕捉到程序異常但程序不退出,有時候不確定程序是否會異常,有時候希望自己定義異常,中斷程序運行。

異常處理raise

使用raise拋出異常,一旦執行了raise語句,raise後面的語句將不能執行。

try:
     s = None
     if s is None:
         print "s None"
         raise NameError     #如果引發NameError異常,後面的代碼將不能執行
     print len(s)
except TypeError:
     print "None沒有長度"

異常處理try….except

程序發生異常時,try….except捕獲異常避免程序退出。

可能發生錯誤的語句放在try模塊裏,用except來處理異常。except可以處理一個專門的異常,如果except後沒有指定異常,則默認處理所有的異常。每一個try,都必須至少有一個except

# 不處理
a = 10
b = 'leason'
c=a+b
print 'over'
result:
Traceback (most recent call last):
  File "F:/gitHub/OrmCommand/app/test.py", line 17, in <module>
    c = a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'



# 處理
a = 10
b = 'leason'
try:
    c = a + b
    print c
except TypeError, e:
    print e.message
print 'over'

result:
unsupported operand type(s) for +: 'int' and 'str'
over

try ….except…else 語句,當沒有異常發生時,else中的語句將會被執行。

try …finally語句, 無論異常是否發生,在程序結束前,finally中的語句都會被執行。

斷言assert

在表達式expression1爲假的時候,結束程序,拋出斷言類錯誤(AssertionError: expresssion2),表達式expression2可有可無。*當然,如果expression爲真的時候,什麼都不做,繼續往下執行。

a = 888
assert type(a) == str,'a is type of int'

result:
Traceback (most recent call last):
  File "F:/gitHub/OrmCommand/app/test.py", line 20, in <module>
    assert type(a) == str,'a is type of int'
AssertionError: a is type of int

並不是任何時候應用斷言都是合適的,在Python中錯誤都有自己的類型,只有在自己不確定、或者懷疑會出錯的時候用斷言,或者在DEBUG時候用斷言

leason | 個人博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章