python中的try except与R语言中的tryCatch异常解决
作者:Kanny广小隶 发布时间:2021-10-22 02:24:48
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)情形一
输入:
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


猜你喜欢
- header() 函数向客户端发送原始的 HTTP 报头。<?php//200 正常状态header('HTTP/1.1 20
- # 比较两个字符串,如果不同返回第一个不相同的位置# 如果相同返回0def cmpstr(str1, str2): &
- sys.dm_io_pending_io_requests可以返回当前IO Pending的状态,对于SQL Server 中每个挂起的I/
- TensorFlow 2.0测试版在今年春季发布,新版本比1.x版本在易用性上有了很大的提升。但是由于2.0发布还没有多久,现在大部分论文的
- flatten()函数用法flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。flatten只能适用于
- Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件.FTP的工作流程及基
- 本文实例讲述了Smarty实现页面静态化(生成HTML)的方法。分享给大家供大家参考,具体如下:为了减少数据库读取次数,某些内容不经常被更改
- 1.彻底弄懂CSS盒子模式一(DIV布局快速入门) 2.彻底弄懂CSS盒子模式二(导航栏实例) 4.彻底弄懂CSS盒子模式四(绝对定位和相对
- 前言Pythonnet这个 * 爆的项目的出现,使得我们可以用一种新的方式,让C#可以和Python之间进行互操作。但是它的设置和部署可能有点问
- 引用PyMongo>>> import pymongo创建连接Connection>>> import
- python运行或调用另一个py文件或参数1. 运行另一个py文件(1)在file_A.py中运行file_B.py文件import oso
- 本文实例讲述了Python微信企业号文本消息推送功能。分享给大家供大家参考,具体如下:企业号的创建、企业号应用的创建、组、tag、part就
- 在javascript中原型(prototype)定义了特定类型的所有实例都可以访问的属性和方法,很多些情况下需要重新对原型中的属性赋值,如
- 题目描述原题链接 :463. 岛屿的周长 - 力扣(LeetCode)给定一个 row x col 的二维网格地图 grid ,其中:gri
- 1,FCKeditor 编辑器最新版本: 2.3.1站点:http://www.fckeditor.net 演示:http://w
- 1、通过复制数据构造张量1.1 torch.tensor()torch.tensor([[0.1, 1.2], [2.2, 3.1], [4
- JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式,通常用于服务端向网页传递数据
- 组件:"Adodb.Stream" 有下列方法: Canc
- 五种Python下划线模式速查表:单前导下划线:_var当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 它是对程序员的一个提
- 在一个文件的末尾追加数据是很常用的。在使用过程中应该都比较熟悉不会出现什么错误。但是往一个文件头部插入数据可能或多或少会碰到一些问题。看似正