Я хочу добавить обработчик исключений. Внутри класса у меня есть ряд методов, и я хочу добавить begin rescue end
во все эти методы. Вместо добавления begin rescue end
во все методы, могу ли я определить его в одном месте?Обработка исключений
ответ
Вы можете извлечь обработку ошибок в метод и вызвать его из всех других методов.
class Foo
def method1
with_exception_handling do
raise 'some error'
end
end
def method2
with_exception_handling do
puts "normal execution"
end
end
private
def with_exception_handling(&block)
begin
block.call
rescue => ex
puts "caught exception: #{ex.message}"
end
end
end
f = Foo.new
f.method1
f.method2
# >> caught exception: some error
# >> normal execution
Я думаю, что в целом это не очень хорошая идея, чтобы иметь такую широкую обработку исключений, поскольку это увеличивает вероятность того, что трудно обнаружить ошибки проскользнуть через ваши тесты и журналы ошибок. Однако, если у вас очень хороший прецедент, вы можете использовать method_missing
, чтобы создать элегантный способ спасти каждый метод без изменения кода в каждом методе.
Если ваш метод
my_object.my_method
Вы можете использовать method_missing
, чтобы следующий синтаксис:
my_object.my_method_rescued
например добавление _rescued
к любому имени метода будет выполнять этот метод, завернутый в обработчике ошибок.
Это очень грубый пример, но это должно дать вам идею:
class MyClass
def my_method
raise 'error!!!'
end
def method_missing(method_name, *args)
if method_name.to_s.end_with? '_rescued'
rescue_wrapper(method_name[0..-9], *args)
end
end
private
def rescue_wrapper(method_name, *args)
begin
self.send(method_name, *args)
rescue => e
# Error handling code here...
end
end
end
my_object = MyClass.new
my_object.my_method_rescued # => Calls error handling code on error
my_ojbect.my_method # => Raises an exception on error
Или можно использовать некоторые метапрограммы для обертывания методов с обработкой ошибок. –
- 1. Обработка исключений
- 2. обработка исключений
- 3. Обработка исключений
- 4. Обработка исключений?
- 5. Обработка исключений
- 6. Обработка исключений
- 7. Обработка исключений
- 8. Обработка исключений
- 9. Обработка исключений
- 10. Обработка исключений
- 11. Обработка исключений
- 12. Обработка исключений
- 13. Обработка исключений
- 14. Обработка исключений
- 15. Обработка исключений для обработки исключений
- 16. обработка исключений для исключений servicemodel
- 17. Обработка исключений при обработке исключений
- 18. Обработка исключений на Python
- 19. PostgreSQL Обработка исключений
- 20. Обработка исключений подпроцессов Python
- 21. Обработка исключений Apache Spark
- 22. Обработка исключений в Iphone
- 23. Python Пользовательской Обработка исключений
- 24. Обработка исключений UpdatePanel
- 25. Обработка исключений JavaEE EntityManager
- 26. appnexusapi gem обработка исключений
- 27. Расширенная обработка исключений
- 28. Обработка нескольких исключений
- 29. Обработка исключений в потоках
- 30. PLSQL обработка пользовательских исключений
Ваша ситуация не достаточно ясна. – sawa
Работа в одном и том же случае? –