python中的try except與R語(yǔ)言中的tryCatch異常解決
1. 起因
當(dāng)我們需要寫(xiě)一個(gè)非常非常長(zhǎng)的循環(huán)時(shí),通常在某個(gè)循環(huán)如果出現(xiàn)error,那么整個(gè)代碼后面的循環(huán)就不能進(jìn)行。
這時(shí)候試想,如果你在服務(wù)器上掛一個(gè)要跑很久的循環(huán)(并行),亦或是需要在自己電腦上掛一晚上跑東西,可能剛點(diǎn)完運(yùn)行,美滋滋地上床后,程序突然出現(xiàn)問(wèn)題。這時(shí)第二天滿(mǎn)懷期待地點(diǎn)亮屏幕,發(fā)現(xiàn)是一個(gè)大大的紅紅的ERROR
時(shí),估計(jì)頭發(fā)或許又會(huì)稀疏了不少。
于是這時(shí)候就會(huì)想,能不能在跑的時(shí)候,如果程序出現(xiàn)錯(cuò)誤,那么我們直接繞開(kāi)這些問(wèn)題,進(jìn)行下一次循環(huán)。
其實(shí)這種問(wèn)題在Python
與R
中,都有相應(yīng)的解決方法。
2. Python中的try/except
首先貼上官方說(shuō)明文檔:
英文文檔:https://docs.python.org/3/tutorial/errors.html
中文文檔:https://docspy3zh.readthedocs.io/en/lates t/tutorial/errors.html
這里我們仿造文檔中間的例子進(jìn)行構(gòu)造自己的例子,具體如下述代碼所示。
def divide(x, y): try: result = x / y except ZeroDivisionError: print("division by zero!") except: print('unknown error!') else: print("result is", result) finally: print("executing finally clause")
這里解釋一下程序邏輯:首先運(yùn)行try
,如果:
不報(bào)錯(cuò),就會(huì)跳到else
,最后到final
分母為0的錯(cuò)誤,會(huì)跳到except ZeroDivisionError
,然后直接忽略else
到最后的finally
其他類(lèi)型的錯(cuò)誤,會(huì)忽略exc
ept ZeroDivisionError
,然后到except
,接著再忽略else
到最后的finally
也就是說(shuō)無(wú)論如何,finally
都是會(huì)運(yùn)行的。
下面我們驗(yàn)證三種輸入:
1)情形一
輸入:
divide(2, 1)
輸出:
result is 2.0 executing finally clause
2)情形二
輸入:
divide(2, 0)
輸出:
division by zero! executing finally clause
3)情形三
divide("2", "1")
輸出:
error! executing finally clause
3. R中的tryCatch
同樣的,在R
中的tryCatch
函數(shù)也是同樣解決類(lèi)似的問(wèn)題。
可參考官方說(shuō)明文檔:trycatch: Evaluates an expression with the possibility to catch exceptions (DEPRECATED)
然后運(yùn)行上面類(lèi)似的程序,來(lái)看看用法
divide <- function(x, y) { result <- tryCatch({ x / y }, warning = function(war) { cat("warning!", war, "\n") }, error = function(err) { cat("error!", err, "\n") }, finally = { print("executing finally clause") }) return(result) }
這里需要格外注意的是,tryCatch
后面是要加上小括號(hào)和大括號(hào)的。另外我加上了err
這個(gè)對(duì)象,相當(dāng)于會(huì)輸出報(bào)錯(cuò)信息。
下面為運(yùn)行結(jié)果:
1)情形一
輸入:
divide(1, 2)
輸出:
[1] "executing finally clause" [1] 0.5
我是先finally
,再return
,所以會(huì)是上述的輸出結(jié)果。
2)情形二
輸入:
divide(1, 0)
輸出:
[1] "executing finally clause" [1] Inf
注意,R會(huì)輸出Inf
,這點(diǎn)與Python不同。
3)情形三
輸入:
divide(1, '0')
輸出:
error! Error in cat("error!", err, "\n") : argument 2 (type 'list') cannot be handled by 'cat' [1] "executing finally clause"
補(bǔ)充
最后如果我們?nèi)绻胍?code>R中忽略一些可能報(bào)錯(cuò)的代碼時(shí)(不需要輸出任何報(bào)錯(cuò)信息),直接使用try()
即可。
以上就是python中的try except與R語(yǔ)言中的tryCatch異常解決的詳細(xì)內(nèi)容,更多關(guān)于python與R語(yǔ)言異常解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python如何實(shí)現(xiàn)定時(shí)器功能
在本篇文章里小編給大家分享的是關(guān)于Python中的簡(jiǎn)單定時(shí)器實(shí)例及代碼,需要的朋友們可以學(xué)習(xí)下。2020-05-05Python實(shí)現(xiàn)定時(shí)發(fā)送監(jiān)控郵件
這篇文章主要為大家講解如何用python連接郵箱,實(shí)現(xiàn)自動(dòng)發(fā)送監(jiān)控郵件,文中的示例講解詳細(xì),對(duì)我們了解Python有一定的幫助,需要的可以參考一下2022-01-01Python 循環(huán)語(yǔ)句之 while,for語(yǔ)句詳解
Python中有兩種循環(huán),分別為:for循環(huán)和while循環(huán)。 for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串。while 語(yǔ)句用于循環(huán)執(zhí)行程序,即在某條件下,循環(huán)執(zhí)行某段程序,以處理需要重復(fù)處理的相同任務(wù)。2018-04-04Python編寫(xiě)通訊錄通過(guò)數(shù)據(jù)庫(kù)存儲(chǔ)實(shí)現(xiàn)模糊查詢(xún)功能
數(shù)據(jù)庫(kù)存儲(chǔ)通訊錄,要求按姓名/電話(huà)號(hào)碼查詢(xún),查詢(xún)條件只有一個(gè)輸入入口,自動(dòng)識(shí)別輸入的是姓名還是號(hào)碼,允許模糊查詢(xún)。這篇文章主要介紹了Python編寫(xiě)通訊錄,支持模糊查詢(xún),利用數(shù)據(jù)庫(kù)存儲(chǔ),需要的朋友可以參考下2019-07-07Python Pandas Dataframe.describe()使用及代碼實(shí)例
這篇文章主要介紹了Python Pandas Dataframe.describe()使用及代碼實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python從列表推導(dǎo)到zip()函數(shù)的5種技巧總結(jié)
在本篇文章里小編給大家整理的是關(guān)于Python從列表推導(dǎo)到zip()函數(shù)的5種技巧的相關(guān)知識(shí)點(diǎn)和代碼,需要的朋友們參考學(xué)習(xí)下。2019-10-10python求列表對(duì)應(yīng)元素的乘積和的實(shí)現(xiàn)
這篇文章主要介紹了python求列表對(duì)應(yīng)元素的乘積和的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python opencv畫(huà)局部放大圖實(shí)例教程
這篇文章主要給大家介紹了關(guān)于python opencv畫(huà)局部放大圖的相關(guān)資料,獲取鼠標(biāo)的單擊相應(yīng)以及鼠標(biāo)的移動(dòng)信息,進(jìn)行放大功能的實(shí)現(xiàn),需要的朋友可以參考下2021-10-10基于Python實(shí)現(xiàn)一鍵批量查詢(xún)郵編
這篇文章主要為大家詳細(xì)介紹了如何利用Python快速實(shí)現(xiàn)查詢(xún)excel表格里所有郵編對(duì)應(yīng)的地址信息,將輸出的省市縣信息分開(kāi)放在不同的單元格中,感興趣的可以了解下2023-08-08Python實(shí)現(xiàn)創(chuàng)建快速剪映草稿軌道自動(dòng)生成視頻
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)創(chuàng)建快速剪映草稿軌道并自動(dòng)生成視頻,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-08-08