python中的try except与R语言中的tryCatch异常解决

作者:Kanny广小隶 时间:2021-10-22 02:24:48 

1. 起因

当我们需要写一个非常非常长的循环时,通常在某个循环如果出现error,那么整个代码后面的循环就不能进行。

这时候试想,如果你在服务器上挂一个要跑很久的循环(并行),亦或是需要在自己电脑上挂一晚上跑东西,可能刚点完运行,美滋滋地 * 后,程序突然出现问题。这时第二天满怀期待地点亮屏幕,发现是一个大大的红红的ERROR时,估计头发或许又会稀疏了不少。

于是这时候就会想,能不能在跑的时候,如果程序出现错误,那么我们直接绕开这些问题,进行下一次循环。

其实这种问题在PythonR中,都有相应的解决方法。

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

其他类型的错误,会忽略except ZeroDivisionError,然后到except,接着再忽略else到最后的finally

也就是说无论如何,finally都是会运行的。

下面我们验证三种输入:

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函数也是同样解决类似的问题。

可参考官方说明文档: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()即可。

来源:https://kanny.blog.csdn.net/article/details/84667843

标签:R,异常分析,tryCatch,except
0
投稿

猜你喜欢

  • Python模拟简单电梯调度算法示例

    2021-09-27 14:52:31
  • python的setattr函数实例用法

    2023-08-17 18:49:59
  • 教你使用pyqt实现桌面歌词功能

    2021-04-22 16:11:04
  • 揭开HTML 5工作草稿的神秘面纱

    2008-02-13 08:25:00
  • Python代码实现KNN算法

    2023-05-07 10:45:36
  • python 中open文件路径的选择问题解析

    2022-04-02 14:04:58
  • 浅谈Python中的zip()与*zip()函数详解

    2021-01-26 13:28:49
  • Python实现ATM系统

    2021-10-17 05:20:46
  • 使用批处理脚本自动生成并上传NuGet包(操作方法)

    2021-12-24 18:05:34
  • position两三事

    2009-02-16 15:23:00
  • 清除代码异味

    2011-05-21 08:34:00
  • Pytorch如何把Tensor转化成图像可视化

    2021-11-03 20:20:22
  • python进程间通信Queue工作过程详解

    2021-04-12 01:15:58
  • python数据处理之Pandas类型转换的实现

    2021-04-11 11:17:36
  • python实现linux下使用xcopy的方法

    2022-08-16 07:52:09
  • python批量识别图片指定区域文字内容

    2021-04-26 13:59:54
  • ASP中生成文件的两种方式

    2007-08-30 09:49:00
  • 在Python中使用defaultdict初始化字典以及应用方法

    2021-01-05 02:03:02
  • pyqt5 使用cv2 显示图片,摄像头的实例

    2023-09-28 10:33:24
  • Python实现获取nginx服务器ip及流量统计信息功能示例

    2023-08-03 02:03:26
  • asp之家 网络编程 m.aspxhome.com