# Gli errori con ruby

**URL:** <https://www.ruby-forum.com/t/gli-errori-con-ruby/113680>\
**Category:** IT\
**Created:** [September 3, 2007, 9:01pm UTC](https://www.ruby-forum.com/t/gli-errori-con-ruby/113680 "2007-09-03T21:01:00Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![simone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/cab0a1/32.png) [@simone](https://www.ruby-forum.com/u/simone)\
**Post date:** [September 3, 2007, 9:01pm UTC](https://www.ruby-forum.com/t/gli-errori-con-ruby/113680/1 "2007-09-03T21:01:00Z")

</div>

Salve.  
ho uno script di questo tipo:

…  
Thread.new do  
miooggetto.metodo  
end  
…

Quello che succede è che se c’è un errore all’interno del codice di  
miooggetto.metodo, questo non mi viene segnalato da ruby, lo script  
sembra si esegua fino al punto dove poi c’è l’errore e poi rimanga  
bloccato.  
Se porto il codice buggato al di fuori del metodo e lo provo su uno  
script di prova, l’errore mi viene invece segnalato.  
Perchè?

---

<div class="post-metadata">

**Author:** ![simone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/cab0a1/32.png) [@simone](https://www.ruby-forum.com/u/simone)\
**Post date:** [September 4, 2007, 11:08am UTC](https://www.ruby-forum.com/t/gli-errori-con-ruby/113680/2 "2007-09-04T11:08:24Z")

</div>

Simone [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> Quello che succede Ã¨ che se c’Ã¨ un errore all’interno del codice di  
> miooggetto.metodo, questo non mi viene segnalato da ruby, lo script  
> sembra si esegua fino al punto dove poi c’Ã¨ l’errore e poi rimanga  
> bloccato.  
> Se porto il codice buggato al di fuori del metodo e lo provo su uno  
> script di prova, l’errore mi viene invece segnalato.  
> PerchÃ¨?

Ã‰ il comportamento di default. Il thread principale non muore se un  
figlio scatena un’eccezione. Se setti Thread.abort\_on\_exception a true  
allora avrai il comportamento che desideri. Es.

class Foo  
def bar  
1 / 0  
end  
end  
a = Foo.new

Thread.abort\_on\_exception = true  
Thread.new do  
a.bar  
end

puts “Not reached”

Invece che generare un abort di ruby puoi sempre gestire gli errori in  
maniera piu’ completa con begin,rescue, ensure, etc.

Ciao
