Vengo de un fondo C# donde suelo volver a plantear excepciones con la excepción original contenida dentro de la excepción padre. ¿Hay un concepto similar disponible en Ruby? ¿Cómo puedo detectar y generar una excepción mientras mantengo el contexto de la excepción de nivel inferior?ruby - excepción de re-raise con la sub-excepción
11
A
Respuesta
14
Tome un vistazo a los trucos de la charla Exceptional Ruby por Avdi Grimm:
class MyError < StandardError
attr_reader :original
def initialize(msg, original=nil);
super(msg);
@original = original;
end
end
# ...
rescue => error
raise MyError.new("Error B", error)
end
4
Es posible extender StandardError:
class StandardError
attr_accessor :original
end
y cuando levanta una excepción, acaba de establecer esta propiedad:
def reraise ex, original
ex.original = original
raise ex
end
rescue StandardError => e
reraise ArgumentError.new('Message'), e
end
Con este enfoque, podrá elevar el rubí estándar rors y establecer el error principal para ellos, no solo sus errores personalizados.
5
Ruby 2.1 añadió Exception#cause función para resolver este problema.
Cuestiones relacionadas
- 1. Ruby Enumerator - ¿Por qué terminar con excepción?
- 2. Excepción de resubida de Ruby con argumento de cadena adicional
- 3. Ruby get backtrace sin excepción
- 4. Excepción de Ruby, clases de error
- 5. excepción extraña con delayed_job
- 6. Ayuda con Ruby Koans # 6 - ¿Qué excepción ha sido atrapada?
- 7. Usando la subclase de excepción correcta en ruby
- 8. excepción Twig_Error_Runtime con la función
- 9. excepción de capturas con la Condición
- 10. Prevenir la tarea.Continuar con la excepción
- 11. Ruby Loops con la abuela
- 12. Drb y la excepción "objeto reciclado"
- 13. excepción slf4j con cuarzo
- 14. ¿Lanzar excepción al volver a asignar una constante en Ruby?
- 15. Ruby on Rails 3 + Apache2 + Phusion Passenger: Bundler :: excepción GemNotFound
- 16. primeros mensajes de excepción oportunidad cuando la excepción se maneja con seguridad
- 17. Una excepción de Seinerium webdriver
- 18. Detectar parada con la gema Ruby Daemons
- 19. ¿Hay alguna manera de iniciar el depurador Ruby en la excepción?
- 20. ¿Puedo acceder a la unión en el momento de una excepción en Ruby
- 21. Conectarse a la red Tor con ruby
- 22. Ninguna aplicación está asociada con la excepción de archivos especificado
- 23. Excepción de manejo global en la aplicación WPF con Caliburn.Micro
- 24. PHP función de la vieja escuela "o" con excepción
- 25. System.Drawing.Icon constructor de lanzar la "Operación completada con éxito" excepción
- 26. Implementando .NET Gridview con SqlDataSource - en la excepción de edición
- 27. Excepción al intentar conectar con la base de datos .sdf
- 28. NSInvalidArgumentException excepción/copyWithZone con NSMutableDictionary
- 29. Obtener una excepción con AutoMapper
- 30. Capturando la excepción específica
No tiene que incluir msg como argumento en do super (msg). Si levanta MyError (error), 'algún mensaje' con esos cambios, 'algún mensaje' se pasará como un argumento implícito. – daremkd