Variables not recognized within Rescue in Ruby -
i have following code:
rescue timeout::error, standarderror => e puts "caught exception: #{e.message}".red log.puts("#{e.backtrace}") email_ids_all.each |email_delete| call= "/api/v2/emails/#{email_delete}/" ......
before rescue
piece have defined log
, email_ids_all
. however, neither of these recognized within ruby script. if this:
rescue timeout::error, standarderror => e file.open(rescuelogfile, 'w') |log| #setup log write response codes. puts "caught exception: #{e.message}".red log.puts("#{e.backtrace}") email_ids_all.each |email_delete| call= "/api/v2/emails/#{email_delete}/" ....
log
works fine, makes sense. take lot of writing redefine email_ids_all
array , other variables contained inside rescue block.
is there anyway allow variables recognized inside rescue? code laid out this:
begin #some code rescue #above code end
i using ruby 1.9.3.
edit----
log
starts right after begin
statement :
begin file.open(logfile, 'w') |log| #setup log write response codes.
log.puts
works throughout entire code except when error thrown, , runs rescue script log
not available.
the same goes email_ids_all
. there api call generates 10,000 emails , each of them added array email_ids_all
. script receiving error halfway through generating these emails, , need rescue script delete email ids in email_ids_all
array. whatever reason, following error:
fs_test_env.rb:762:in `block in <main>': undefined local variable or method `email_ids_all' main:object (nameerror) fs_test_env.rb:759:in `open' fs_test_env.rb:759:in `rescue in <main>' fs_test_env.rb:7:in `<main>'
any thoughts?
the scope of block parameter log
limited block. whole point of open
block.
maybe want do:
begin log = file.open('logfile', 'w') ... rescue ... ensure log.close end
note not cover errors when opening logfile.
regarding email_ids_all
, guess (!) have exception in statement like:
email_ids_all = ... long , complex calculation raises exception
if yes, problem assignment happens after whole right-hand side calculated. var email_ids_all
not yet created when exception happens.
in order access elements created before exception, have keep track of them, e.g.
begin email_ids = [] 10000.times email_ids << ... # create element raising exception end rescue ... # treat created elements end
Comments
Post a Comment