python中异常和错误是同一个概念吗_Python 错误与异常
2017-08-01 13:40:17
在程序運行過程中,總會遇到各種各樣的錯誤。
有的錯誤是程序編寫有問題造成的,比如本來應該輸出整數(shù)結(jié)果輸出了字符串,這種錯誤我們通常稱之為bug,bug是必須修復的。
有的錯誤是用戶輸入造成的,比如讓用戶輸入email地址,結(jié)果得到一個空字符串,這種錯誤可以通過檢查用戶輸入來做相應的處理。
還有一類錯誤是完全無法在程序運行過程中預測的,比如寫入文件的時候,磁盤滿了,寫不進去了,或者從網(wǎng)絡抓取數(shù)據(jù),網(wǎng)絡突然斷掉了。這類錯誤也稱為異常,在程序中通常是必須處理的,否則,程序會因為各種問題終止并退出。
既然有這么多可能出現(xiàn)的錯誤,那么錯誤的處理工作就顯得非常重要了。
異常處理
使用try...except捕獲錯誤,異常處理并不僅僅處理那些直接發(fā)生在try子句中的異常,而且還能處理子句中調(diào)用的函數(shù)(甚至間接調(diào)用的函數(shù))里拋出的異常。
try語句按照如下方式工作;
首先,執(zhí)行try子句(在關(guān)鍵字try和關(guān)鍵字except之間的語句)
如果沒有異常發(fā)生,忽略except子句,try子句執(zhí)行后結(jié)束。
如果在執(zhí)行try子句的過程中發(fā)生了異常,那么try子句余下的部分將被忽略。如果異常的類型和 except 之后的名稱相符,那么對應的except子句將被執(zhí)行。最后執(zhí)行 try 語句之后的代碼。
如果一個異常沒有與任何的except匹配,那么這個異常將會傳遞給上層的try中。
一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有一個分支會被執(zhí)行。
處理程序?qū)⒅会槍膖ry子句中的異常進行處理,而不是其他的 try 的處理程序中的異常。
try:
try_suiteexcept:
exception block
上面except子句不跟任何異常和異常參數(shù),所以無論try捕獲了任何異常,都將交給except子句的exception block來處理。
一個except子句可以同時處理多個異常,這些異常將被放在一個括號里成為一個元組,例如:
except(RuntimeError, TypeError, NameError):pass
try except 語句還有一個可選的else子句,如果使用這個子句,那么必須放在所有的except子句之后。這個子句將在try子句沒有發(fā)生任何異常的時候執(zhí)行。使用 else 子句比把所有的語句都放在 try 子句里面要好,這樣可以避免一些意想不到的、而except又沒有捕獲的異常。例如:
for arg in sys.argv[1:]:try:
f= open(arg, 'r')exceptIOError:print('cannot open', arg)else:print(arg, 'has', len(f.readlines()), 'lines')
f.close()
定義清理行為
try...except...finally... : finally子句它定義了無論在任何情況下都會執(zhí)行的清理行為。
異常拋出
raise命令會將異常進行拋出。
如果一個異常在 try 子句里(或者在 except 和 else 子句里)被拋出,而又沒有任何的 except 把它截住,那么這個異常會在 finally 子句執(zhí)行后再次被拋出。
要是在當前函數(shù)里沒有找到的話,它會將異常傳遞給上層的調(diào)用函數(shù),看看那里能不能處理。
如果在最外層(全局“main”)還是沒有找到的話,解釋器就會退出,同時打印出traceback以便讓用戶找到錯誤產(chǎn)生的原因。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python中异常和错误是同一个概念吗_Python 错误与异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 生成器_Python生成器
- 下一篇: websocket python爬虫_p