python异常捕获_Python-异常捕捉
為什么要使用異常捕捉
在運行程序的某一個功能時,可能會出現(xiàn)這樣的錯誤或者那樣的錯誤,有時一個功能可能是由多個模塊組合而成的,這樣排錯就無法追蹤是哪個環(huán)節(jié)出了問題,這時候就需要一個異常處理器來捕獲這些異常。
一般程序遇到異常時會自動退出程序并拋出異常,在使用try語句來檢測錯誤時,遇到錯誤則會跳轉(zhuǎn)到try處理器,程序會在try之后重新執(zhí)行。
有時候,為了處理一些不常見的異常情況,就需要用到異常處理器,避免編寫應對特殊情況的代碼。
try/finally語句確保一定會進行需要的結束運算,無論程序是否有異常都將會執(zhí)行finally語句下的代碼。
def foo(a,b):
a/b
>>> foo(10,0)
當b(除數(shù))等于0的時候就會觸發(fā)異常便會觸發(fā)默認的異常管理器并拋出異常,打印標準出錯信息立即終止程序
當運行一個小的腳本時遇到異常啟動默認管理器拋出異常并程序終止是可行的,在有些情況這并不是我們想要的,例如服務器程序在內(nèi)部某個地方發(fā)生錯誤需要依然保持工作,則需要把相關代碼裝在try語句內(nèi)捕捉異常。
def foo(a,b):
try:
a/b
except:
print(‘程序出現(xiàn)異常’)
上面的except子句沒有接任何異常和參數(shù),所有無論try捕獲了任何異常都將會交給except子句來處理無法定位具體異常,這樣和默認異常管理相比就是不會中斷程序。
def foo(a,b):
try:
a/b
except ZeroDivisionError:
print(‘除數(shù)不能為0’)
print(‘continuing’)
>>>foo(1,0)
除數(shù)不能為0
continuing
上面的例子中,except子句后接了具體異常,只處理除0的異常,所以當b等于0時,才會啟動try管理器執(zhí)行后續(xù)代碼并且能看到最后輸出continuing。其他異常則想上層冒泡并執(zhí)行默認異常管理器,程序中斷,標準輸出錯誤信息。
try:
num = int(raw_input(“輸入一個整數(shù):”))
print(100/num)
except ZeroDivisionError:
print(“Error:必須大于等于1!”)
except ValueError:
print(“Error:必須輸入整數(shù)!”)
try語句也可以捕獲多個異常,上面的例子中既捕獲了除0的錯誤同時也捕獲了ValueError 錯誤。
def foo(a,b):
try:
a/b
except ZeroDivisionError,e:
print(‘除數(shù)不能為0’)
>>> e
>>> integer division or modulo by zero
看到上面的例子你可能會問這個e是個什么鬼,這個e其實是一個異常類的實例,是代碼更加詳細的錯誤信息。
def foo():
try:
f = open(‘test.txt’
except IOError,e:
print(‘錯誤信息:%s’%e)
else:
print(‘無錯誤’)
>>>f.close()
try的else語句和其他條件語句類似,看了例子應該就會明白了。
def foo():
try:
f = open(‘test.txt’)
except IOError,e:
print(‘錯誤信息:%s’%e)
else:
print(‘無錯誤’)
finally:
f.close()
在有些情況下有些操作無論你前面的代碼是否執(zhí)行成功都需要執(zhí)行的情況下,finally子句就用的上了例如上面例子中無論文件test.txt操作是否成功都需要關閉文件。 總結下Python的完整異常語句,需要針對不同的業(yè)務場景靈活使用。
try:
try_suite
except Exception1,Exception2,…,Argument:
exception_suite
…… #other exception block
else:
no_exceptions_detected_suite
finally:
always_execute_suite
總結
以上是生活随笔為你收集整理的python异常捕获_Python-异常捕捉的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无牙颌种植修复好吗
- 下一篇: websocket python爬虫_p