Provengo da uno sfondo C# in cui di solito ri-sollevo le eccezioni con l'eccezione originale contenuta nell'eccezione genitore. Un concetto simile è disponibile in Ruby? Come posso rilevare e sollevare un'eccezione mantenendo il contesto dell'eccezione di livello inferiore?ruby - re-raise exception con sub-exception
11
A
risposta
14
Date un'occhiata i trucchi del discorso Exceptional Ruby di 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
Si può estendere StandardError:
class StandardError
attr_accessor :original
end
e quando si alza un'eccezione, basta impostare questa proprietà:
def reraise ex, original
ex.original = original
raise ex
end
rescue StandardError => e
reraise ArgumentError.new('Message'), e
end
Con questo approccio sarete in grado di aumentare il rubino standard rors e imposta l'errore genitore per loro, non solo i tuoi errori personalizzati.
5
Ruby 2.1 ha aggiunto la funzionalità per risolvere questo problema.
Problemi correlati
- 1. Reraise (stessa eccezione) dopo aver rilevato un'eccezione in Ruby
- 2. Python: Catching exception exception
- 3. firefox marionette bypass exception exception
- 4. Spring - catch bean exception exception
- 5. android.view.WindowLeaked exception
- 6. Bloccato con JAXB - Unmarshal XML exception
- 7. throws Exception in un metodo con Kotlin
- 8. classe Exception con un char * costruttore
- 9. UpdatePanel Exception Handling
- 10. C++ Exception Handling
- 11. LINQ Iterator Exception Handling
- 12. Personalizzazione di Zuul Exception
- 13. Perché java ArrayIndexOutOfBound Exception Extends IndexOutofBound Exception not Throwable?
- 14. JUnit Exception Testing
- 15. applet Local Security Exception
- 16. Pig java.lang.NoSuchFieldException: jobsInProgress exception
- 17. Enhanced For Loop Exception
- 18. Null pointer Exception - findViewById()
- 19. Servlet Faces - ClassNotFound Exception
- 20. SQL Lite Exception
- 21. Python MongoDB clob exception
- 22. Grails DataSource Exception
- 23. SQLite chiuso SQL exception
- 24. FXML Load exception
- 25. autoFocus throwing exception
- 26. Spring Resttemplate exception handling
- 27. derivante da std :: exception
- 28. Android TagHandler exception
- 29. HsqlException: data exception
- 30. Confronta Delphi Exception Handlers
Non è necessario includere msg come argomento in do super (msg). Se si solleva MyError (errore), 'qualche messaggio' con tali modifiche, 'qualche messaggio' verrà passato come argomento implicito. – daremkd