Forum: Italian Ruby user group exception handlers

33c7c2cca02b80f026c30039cf8e312c?d=identicon&s=25 Michele Boscolo (sphynx)
on 2014-04-01 20:05
Ciao a tutti, vorrei se possibile, un aiuto da voi riguardante la
gestine delle eccezzioni in ruby, il mio quesito è come posso uscire da
una serie di chimate a metodi in maniera da non eseguire il codice che
viene dopo il metodo chiamato che ha sollevato l'eccezzione, senza però
uscire dal programma, perchè questo è compposto da una gui scritta in
GTK, che dovrebbe solo aprire il messaggio d'errore ma lasciare la gui
aperta.

Per semplicità e maggiore chiarezza vi ho scritto due righe di codice
per dare l'idea di quello che sto cercando:

http://pastebin.com/embed_js.php?i=Ze9hUnvA

In questo caso le chiamte a metodi sono poche è riuscirei a gestirle
facilmente con un dei return, ma se il mio three di chimate fosse molto
piu lungo come posso uscire da tutte le chiamate senza uscire dal
programma.

Grazie a tutti.

CIAO
96de2d8d465edb7a3cf9573b3ec174d4?d=identicon&s=25 Stefano Verna (Guest)
on 2014-04-01 20:14
(Received via mailing list)
Attachment: signature.asc (496 Bytes)
Ciao Michele,
non capisci come dovrebbe funzionare a livello ruby, o  un problema a
livello GTK? In linea di massima  sufficiente mettere una rescue nel
metodo pi esterno, no? Al lancio delleccezione, a prescindere dalla
profondit dello stack di metodi, vai a finire diritto sul primo rescue
che viene trovato.
33c7c2cca02b80f026c30039cf8e312c?d=identicon&s=25 Michele Boscolo (sphynx)
on 2014-04-01 21:48
Grazie per la risposta, il problema non è a livello di GTK.

Comunque con il suggerimento che mi hai dato credo che tu intendessi
questo:

class Cane
   def ciao
      puts "ciao"
      begin
         come_ti_chiami
      rescue  Exception => e
         puts e.message
         return
      end
      puts "questa parte di codice non deve essere eseguita"
   end

   def come_ti_chiami
      puts "come ti chiami"
      abbaia
      puts "questa parte di codice non deve essere eseguita"
   end

   def abbaia
      1.upto(100) do |i|
         raise "Error nel metodo abbaia"  if i == 10
         puts 'Bau Bau!!'
      end
   end
end

cane = Cane.new

cane.ciao


Perfetto, funzionare funziona!!! Secondo voi questo è il modo più
elegante per gestire tale circostanza.

Grazie ancora a Stafano per il suggerimento.

CIAO
32d80da41830a6e6c1bb3eb977537e3e?d=identicon&s=25 Alessandro R. (alessandro_r)
on 2014-04-28 19:31
(Received via mailing list)
Cos?

def ciao
  puts "ciao"
  come_ti_chiami
  puts "questa parte di codice non deve essere eseguita"
  rescue  Exception => e
    puts e.message
end

Alessandro Rodi


2014-04-01 21:48 GMT+02:00 michele boscolo <miboscol@gmail.com>:
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.