这篇教程python中的try except与R语言中的tryCatch异常解决写得很实用,希望能帮到您。
1. 起因当我们需要写一个非常非常长的循环时,通常在某个循环如果出现error,那么整个代码后面的循环就不能进行。 这时候试想,如果你在服务器上挂一个要跑很久的循环(并行),亦或是需要在自己电脑上挂一晚上跑东西,可能刚点完运行,美滋滋地上床后,程序突然出现问题。这时第二天满怀期待地点亮屏幕,发现是一个大大的红红的ERROR 时,估计头发或许又会稀疏了不少。 于是这时候就会想,能不能在跑的时候,如果程序出现错误,那么我们直接绕开这些问题,进行下一次循环。 其实这种问题在Python 与R 中,都有相应的解决方法。
2. Python中的try/except首先贴上官方说明文档: 英文文档:https://docs.python.org/3/tutorial/errors.html 中文文档:https://docspy3zh.readthedocs.io/en/lates t/tutorial/errors.html 这里我们仿造文档中间的例子进行构造自己的例子,具体如下述代码所示。 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") 这里解释一下程序逻辑:首先运行try ,如果: 不报错,就会跳到else ,最后到final 分母为0的错误,会跳到except ZeroDivisionError ,然后直接忽略else 到最后的finally 其他类型的错误,会忽略exc ept ZeroDivisionError ,然后到except ,接着再忽略else 到最后的finally 也就是说无论如何,finally 都是会运行的。 下面我们验证三种输入:
1)情形一输入: 输出: result is 2.0executing finally clause
2)情形二输入: 输出: division by zero!executing finally clause
3)情形三输出: 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)情形一输入: 输出: [1] "executing finally clause"[1] 0.5 我是先finally ,再return ,所以会是上述的输出结果。 2)情形二输入: 输出: [1] "executing finally clause"[1] Inf 注意,R会输出Inf ,这点与Python不同。 3)情形三输入: 输出: 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异常解决的详细内容,更多关于python与R语言异常解决的资料请关注51zixue.net其它相关文章! Python 字典的使用详解及实例代码 Django+Bootstrap实现计算器的示例代码 |