Exception handlers

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

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.

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

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 R.

2014-04-01 21:48 GMT+02:00 michele boscolo [email protected]: