Lenon Marcel meu blog sobre qualquer coisa

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á!

CC0 Este artigo está em domínio público.