Captura de exceções no Ruby e a pegadinha do malandro
Há algumas semanas tive uma pequena surpresa ao tentar capturar uma exceção no Ruby:
class MyException < Exception
end
begin
raise MyException.new
rescue
puts "Exception capturada"
end
Simplesmente a cláusula rescue não estava funcionando. Aí eu fui ler a documentação do Ruby e...
The most standard error types are subclasses of StandardError. A rescue clause without an explicit Exception class will rescue all StandardErrors (and only those).
Traduzindo, uma cláusula rescue sem uma Exception explícita irá capturar apenas erros do tipo StandardError. Como MyException era uma subclasse de Exception, o rescue acabou assumindo esse comportamento.
Shame on me. Rá!