我有以下代码:
rescue Timeout::Error, StandardError => e
puts "Caught exception: #{e.message}".red
log.puts("#{e.backtrace}")
email_ids_all.each do |email_delete|
call= "/api/v2/emails/#{email_delete}/"
......
在这篇rescue
文章之前,我已经定义了log
和email_ids_all
。但是,这些都不能在 ruby 脚本中识别。如果我这样做:
rescue Timeout::Error, StandardError => e
File.open(rescuelogfile, 'w') do |log| #setup log to write response codes.
puts "Caught exception: #{e.message}".red
log.puts("#{e.backtrace}")
email_ids_all.each do |email_delete|
call= "/api/v2/emails/#{email_delete}/"
....
log
工作正常,这是有道理的。email_ids_all
重新定义我的救援块中包含的数组和其他变量需要大量的写作。
无论如何允许变量在救援中被识别?基本上我的代码是这样排列的:
begin
#some code
rescue
#above code
end
我正在使用红宝石 1.9.3。
编辑 - -
log
在我的begin
发言之后开始:
begin
File.open(logfile, 'w') do |log| #setup log to write response codes.
log.puts
在整个代码中工作,除非抛出错误,然后在log
不可用的地方运行救援脚本。
也是如此email_ids_all
。有一个 API 调用会生成大约 10,000 封电子邮件,并将每封电子邮件添加到数组email_ids_all
中。该脚本在生成这些电子邮件的中途收到错误,因此我需要救援脚本来删除email_ids_all
数组中的所有电子邮件 ID。但无论出于何种原因,我收到以下错误:
FS_Test_Env.rb:762:in `block in <main>': undefined local variable or method `email_ids_all' for main:Object (NameError)
from FS_Test_Env.rb:759:in `open'
from FS_Test_Env.rb:759:in `rescue in <main>'
from FS_Test_Env.rb:7:in `<main>'
有什么想法吗?