捕获函数中的参数错误?

迪斯基

方法是否有可能处理参数中发生的错误?

例如

def add(arg1, arg2)
    # If the value causes an error, turn it into 0
    rescue nil
        0
    end
    arg1 + arg2
end

add(2, 2+nil) => 2

我知道屏蔽参数并在以后进行评估是一个解决方案,但是在我的情况下,这样做变得太麻烦了。

塔德曼

这样做的问题是在您提供参数的那一行发生错误,因为在调用方法之前先参数进行求值

每个方法调用大致都与此等效:

arg1 = 2
arg2 = 2 + nil

add(arg1, arg2)

在这种情况下,您可以看到参数本身是如何产生错误的。推迟对参数求值的唯一方法是通过一个块:

add(2) do
  2 + nil
end

将您的定义更改为:

def add(v)
  v + yield

rescue
  v + 0
end

盲目地捕获所有异常通常是一个超级糟糕的计划,那里可能存在一些根本性的错误。除非您对异常的种类有期望,否则最好避免捕获异常。

这是没有异常处理的方法版本:

def add(*args)
  args.map(&:to_i).inject(:+)
end

现在nil.to_i返回0,您将得到覆盖:

add(2,2,nil)

这将在2+2+0内部进行评估

通常,尝试掩埋诸如这样的错误是一个糟糕的计划2+nil这是应该解决的基本错误。如果要处理nil值,可以将.to_i其映射到可用的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C-捕获错误的参数错误

来自分类Dev

For循环函数参数错误

来自分类Dev

参数估计中的optim()函数错误

来自分类Dev

参数估计中的optim()函数错误

来自分类Dev

C#Unity onClick事件中的函数参数错误

来自分类Dev

matlab中的函数-未定义的输入参数错误

来自分类Dev

Ruby中的参数错误

来自分类Dev

theano函数的输入参数错误

来自分类Dev

函数错误缺少参数1

来自分类Dev

python:先验函数错误生成的参数

来自分类Dev

C ++参数化的构造函数错误

来自分类Dev

std :: threads构造函数参数错误

来自分类Dev

Azure 函数 documentdb 输出参数错误

来自分类Dev

未捕获的TypeError:fn不是AngularJS网页中的函数错误

来自分类Dev

未捕获的类型错误:$(...).datetimepicker 不是函数错误

来自分类Dev

VB.net逻辑可捕获函数错误

来自分类Dev

流星:如何捕获异步回调函数错误

来自分类Dev

jdbc中的参数错误过多

来自分类Dev

Matlab中输入参数错误不足

来自分类Dev

在Ruby块中获取参数错误

来自分类Dev

jdbc中的参数错误过多

来自分类Dev

选择框集合中的参数错误

来自分类Dev

*#view for Ruby on Rails中的参数错误

来自分类Dev

cal中的额外参数错误

来自分类Dev

php中的fgetc()feof()参数错误

来自分类Dev

错误“参数错误”

来自分类Dev

.NET Web Api 2.1中带有Ninject绑定的无参数构造函数错误

来自分类Dev

类型参数错误:sequencep,尝试在暂存缓冲区中求值函数时,#<buffer * scratch *>

来自分类Dev

在R中的函数内分组时出现“未使用的参数错误”