0
比方說,我遍歷一些項目在數組中,像這樣:提高迭代器內的錯誤,並繼續下一個項目
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
所有你看到像上面這樣驗證操作,解密,進口,上傳是創建新對象的方法。
讓我們說在這些步驟中的任何一步可能會失敗(無論文件是無效的,不能解密等)。我想在這些進程中引發錯誤,但要確保它返回(返回到發生迭代的類)並繼續到數組中的下一個文件路徑。
例如在校驗類(這是驗證類,如果不是在上面的例子清楚),我可能有這樣的事情:
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
我想提出的是錯誤,但確保程序返回到迭代,並繼續到數組中的下一個對象。有沒有簡單的方法來實現這一點?
我有類似的東西,但程序仍然停止運行,如果發生錯誤。 –
你能證明你有什麼?停止時會發生什麼樣的錯誤? – Headshota
'rescue'後可以跟一個捕獲異常的參數列表(例如'ArgumentError');如果沒有參數,則錯誤類型默認爲「StandardError」。你也可以爲不同的錯誤分開'rescue'子句,並且在每個參數列表之後你可以添加'=> var_name',在這種情況下,Ruby將把錯誤信息分配給你指定的變量。 –