說明
寫代碼時,我們有時希望捕捉到程序異常但程序不退出,有時候不確定程序是否會異常,有時候希望自己定義異常,中斷程序運行。
異常處理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時候用斷言