边肖将与大家分享如何解决python中的try除外和R语言中的tryCatch异常的问题。希望大家看完这篇文章后有所收获。我们一起讨论一下吧!
00-1010当我们需要写一个非常非常长的循环时,通常如果一个循环中有错误,那么整个代码后面的循环就无法进行。
这个时候,想象一下,如果你在服务器上挂了一个需要很长时间才能运行的循环(并行),或者你需要在电脑上挂一整夜的东西,你可能只是点击运行,在你愉快地睡觉后,程序突然出现了问题。这时,第二天,屏幕因期待而亮,当发现是一个红色的大ERROR时,估计头发可能又稀疏了。
所以在这个时候,我会想,如果程序在运行的时候有什么错误,那么我们可以直接绕过这些问题,进行下一个循环。
其实对于这个问题,Python和R都有相应的解决方案。
00-1010首先,粘贴官方说明:
英文文件:https://docs.python.org/3/tutorial/errors.html
中文文档:https://docspy3zh.readthedocs.io/en/lates t/教程/错误
这里,我们复制文档中间的示例来构建我们自己的示例,如下面的代码所示。
defdivide(x,y):
尝试:
结果=x/y
例外零分割错误:
print('divisionbyzero!')
除外:
打印('未知错误!')
else:
打印(' resultis ',result)
最后:
Print ('Executing finally lause ')这里,解释一下程序逻辑:如果:
如果你没有报告错误,你会跳到else,最后跳到final。
如果分母为0,错误将跳转到除ZeroDivisionError之外的地方,然后忽略else,直到最后。
其他类型的错误,会忽略除ZeroDivisionError之外的,然后转到除,然后忽略else到最后。
也就是说,最后无论如何都会跑。
我们验证以下三个输入:
00-1010输入:
分频(2,1)输出:
resultis2.0
最终执行laus
1. 起因
输入:
分频(2,0)输出:
分裂!
执行nbsp
;finally clause
3)情形三
divide("2", "1")
输出:
error! executing finally clause
3. R中的tryCatch
同样的,在R
中的tryCatch
函数也是同样解决类似的问题。
可参考官方说明文档:trycatch: Evaluates an expression with the possibility to catch exceptions (DEPRECATED)
然后运行上面类似的程序,来看看用法
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
后面是要加上小括号和大括号的。另外我加上了err
这个对象,相当于会输出报错信息。
下面为运行结果:
1)情形一
输入:
divide(1, 2)
输出:
[1] "executing finally clause" [1] 0.5
我是先finally
,再return
,所以会是上述的输出结果。
2)情形二
输入:
divide(1, 0)
输出:
[1] "executing finally clause" [1] Inf
注意,R会输出Inf
,这点与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"
补充
最后如果我们如果想要在R
中忽略一些可能报错的代码时(不需要输出任何报错信息),直接使用try()
即可。
看完了这篇文章,相信你对“如何解决python中的try except与R语言中的tryCatch异常问题”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/89356.html