人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python中的try except與R語(yǔ)言中的tryCatch異常解決

發(fā)布日期:2021-12-13 10:38 | 文章來(lái)源:源碼中國(guó)

1. 起因

當(dāng)我們需要寫一個(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í)第二天滿懷期待地點(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)題在PythonR中,都有相應(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

其他類型的錯(cuò)誤,會(huì)忽略except 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ù)也是同樣解決類似的問(wèn)題。

可參考官方說(shuō)明文檔:trycatch: Evaluates an expression with the possibility to catch exceptions (DEPRECATED)

然后運(yùn)行上面類似的程序,來(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)文章!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部