Rescue and continue on next statement?

Hello, I’ve seen there is a retry statement that rerun the entire
begin/end block which raised the exception…

I wonder if there is a way to ‘continue’ (from the rescue block) with
the next statement following the one which raised the exception.

Eg :

begin
File.delete("#{@fichier_destination_sql}.gz") # sql
File.delete("#{@fichier_destination_tar}.tgz") # tar
File.delete("/tmp/aboulafia-db-testdb_rbackup-uid1.gz")
File.delete("/tmp/aboulafia-rep-ror_anaema-uid1.tgz")
rescue

end

I want to avoid FileTest.
If a file does not exists, the others will not be deleted which is not
what I want.

I would like

begin
# snip
rescue
continue
end

Is there a solution ? Or a common pattern to avoid this situation ?

Thanks !

On 12/7/06, Zouplaz [email protected] wrote:

Is there a solution ? Or a common pattern to avoid this situation ?

How about this?

file_names = [/your file names here/]

file_names.each do |file|

begin
     File.delete(file)
 rescue
     /*Exception handling goes here */
end

end

On Dec 7, 2006, at 04:10 , Zouplaz wrote:

Hello, I’ve seen there is a retry statement that rerun the entire
begin/end block which raised the exception…

I wonder if there is a way to ‘continue’ (from the rescue block)
with the next statement following the one which raised the exception.

File.delete “#{@fichier_destination_sql}.gz” rescue nil
File.delete “#{@fichier_destination_tar}.tgz” rescue nil
File.delete “/tmp/aboulafia-db-testdb_rbackup-uid1.gz” rescue nil
File.delete “/tmp/aboulafia-rep-ror_anaema-uid1.tgz” rescue nil


Eric H. - [email protected] - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!

Eric H. wrote:

On Dec 7, 2006, at 04:10 , Zouplaz wrote:

Hello, I’ve seen there is a retry statement that rerun the entire
begin/end block which raised the exception…

I wonder if there is a way to ‘continue’ (from the rescue block)
with the next statement following the one which raised the exception.

File.delete “#{@fichier_destination_sql}.gz” rescue nil
File.delete “#{@fichier_destination_tar}.tgz” rescue nil
File.delete “/tmp/aboulafia-db-testdb_rbackup-uid1.gz” rescue nil
File.delete “/tmp/aboulafia-rep-ror_anaema-uid1.tgz” rescue nil


Eric H. - [email protected] - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!

Hmmm… is it just because this is an example that the code is repeated?
If not, how about something like

%W[#{@fichier_destination_sql}.gz
#{@fichier_destination_tar}.tgz
/tmp/aboulafia-db-testdb_rbackup-uid1.gz"
/tmp/aboulafia-rep-ror_anaema-uid1.tgz].each do |f|
File.delete(f) rescue nil
end

Sorry, stray quote. I meant:

%W[#{@fichier_destination_sql}.gz
#{@fichier_destination_tar}.tgz
/tmp/aboulafia-db-testdb_rbackup-uid1.gz
/tmp/aboulafia-rep-ror_anaema-uid1.tgz].each do |f|
File.delete(f) rescue nil
end

Zouplaz wrote:

Hello, I’ve seen there is a retry statement that rerun the entire
begin/end block which raised the exception…

I wonder if there is a way to ‘continue’ (from the rescue block) with
the next statement following the one which raised the exception.

I try this in the “script/console” of my project and works:

[“telefono”,“escritorio”,“sillones”,“sillas”,“sillones”,“cajas”,“modulares”,“archivos”].each
do |title|
begin
p = Product.new(:title => title)
p.save!
rescue ActiveRecord::RecordInvalid => e
#maybe collect errors
next
end
end

Juan M.