# Metaprogrammazione wrap exception

**URL:** <https://www.ruby-forum.com/t/metaprogrammazione-wrap-exception/245119>\
**Category:** IT\
**Created:** [October 25, 2016, 9:21pm UTC](https://www.ruby-forum.com/t/metaprogrammazione-wrap-exception/245119 "2016-10-25T21:21:17Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafa\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/958977/32.png) [@Rafa\_F](https://www.ruby-forum.com/u/Rafa_F)\
**Post date:** [October 25, 2016, 9:21pm UTC](https://www.ruby-forum.com/t/metaprogrammazione-wrap-exception/245119/1 "2016-10-25T21:21:17Z")

</div>

Ciao a tutti, sto cercando di crearmi attraverso prepend e un po di  
metaprogrammazione un modo per catturare le eccezioni per dei metodi di  
classe passati come parametri.

Il modulo che mi sono creato è il seguente:

module HandleException

def self.included(base)  
base.send(:extend, ClassMethods)  
end

module ClassMethods  
def wrap\_exceptions\_for(\*methods)  
silencer = Module.new do  
methods.each do |method|  
define\_method method do |\*args|  
begin  
super(\*args)  
rescue =\> e  
file = e.backtrace[0].split(":")[-3].split("/").last  
ln = e.backtrace[0].split(":")[-2]  
message = file+":"+ln + " =\> " + e.message  
p message  
end  
p “continua dentro il modulo”  
end  
end  
end  
singleton\_class.prepend silencer  
end  
end  
end

Ho creato una classe per usare il mio modulo  
class RemitController  
include HandleException

wrap\_exceptions\_for :download, :converti

class \<\< self

```
def download(controparte: , **_keyword_args)
  p "download"
  p "continua"
end

def converti(controparte: , **_keyword_args)
  p "converti"
  rescue "Errore"
  p "continua"
end

```

end  
end

Il problema è che funziona tutto corretamente l’eccezione viene gestita  
dal mio modulo, il problema è che il codice dopo la gestione della mia  
eccezione non viene eseguito. Quindi per esempio nel metodo converti  
p “continua”, non viene eseguito, ma viene eseguito  
p “continua dentro il modulo”, come posso fare in modo che l’esecuzione  
del programma continui eseguendo il codice dopo la mia rescue.

Grazie
