gpt4 book ai didi

ruby - 在迭代器内的处理过程中引发错误,然后继续下一个项目

转载 作者:行者123 更新时间:2023-12-03 08:56:22 25 4
gpt4 key购买 nike

可以说我正在遍历数组中的某些项,如下所示:

class ImportHandler

attr_reader :files

def initialize
@files = ['file_path','file_path2']
end

def process
files.each do |file|
begin
if validate(file) && decrypt(file)
import(file)
upload(file)
end
rescue Exception => e
raise e
end
end
end

def validate(file)
FileValidator.new(file).run
end
end

您在上方看到的所有操作(如验证,解密,导入和上传)都是创建新对象的方法。

可以说,在这些步骤中的任何一个步骤中,都有可能发生故障(文件无效,无法解密等)。我想在这些过程中的任何一个上引发一个错误,但要确保它返回(返回发生迭代的类)并继续到数组中的下一个文件路径。

例如在validate类中(如果上面的示例中不清楚,这是用于验证的类),我可能会遇到类似以下情况:
class FileValidator

attr_reader :file

def initialize(file)
@file = file
end

def hash_validation(file_path)
unless file.hash == metdata_hash
raise "This file has been tampered with!"
end
end
end

我想提出该错误,但要确保程序返回到迭代,并继续执行数组中的下一个对象。有没有简单的方法可以做到这一点?

最佳答案

只需将代码包装在begin/rescue/end中,急救程序将捕获该错误,然后继续进行下一个迭代:

files.each do |file|
begin
if validate(file) && decrypt(file)
import(file)
upload(file)
end
rescue
// do nothing or maybe provide some output to know that error occured
end
end

另外,您可以从急救电话中调用 retry来尝试使用当前迭代进行重试。当然,您可能需要一些条件,例如重试计数等,以确保您不会陷入无限循环。

关于ruby - 在迭代器内的处理过程中引发错误,然后继续下一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com