예외 처리기를 추가하려고합니다. 수업 시간에 여러 가지 방법이 있으며이 모든 방법에 begin rescue end
을 추가하고 싶습니다. 모든 방법에 begin rescue end
을 추가하는 대신 한 곳에서 정의 할 수 있습니까?예외 처리
Q
예외 처리
-1
A
답변
1
오류 처리를 메서드로 추출하여 다른 모든 메서드에서 호출 할 수 있습니다.
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
1
나는 그것을 감지하기 어려운 버그가 귀하의 테스트 및 오류 로그를 통해 빠져있는 가능성이 높아으로는 광범위한 예외 처리를 위해 좋은 생각이 아니다 일반적으로 생각합니다. 그러나 매우 유스 케이스가 있다면 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
+0
또는 일부 메타 프로그래밍을 사용하여 오류 처리 방법을 래핑 할 수 있습니다. –
관련 문제
- 1. PHP 예외 처리 예외 처리
- 2. 예외 처리 : 발생시킬 예외
- 3. 처리 예외 처리
- 4. PostSharp 처리 예외 처리
- 5. 예외 처리 처리
- 6. 사용자 지정보기 리졸버에서 예외 처리 예외 처리
- 7. 예외 처리
- 8. 처리 예외
- 9. 예외 처리
- 10. 예외 처리
- 11. 예외 처리
- 12. "예외 처리"
- 13. 예외 처리
- 14. 예외 처리
- 15. 예외 처리
- 16. 예외 처리
- 17. 처리 예외
- 18. 처리 예외
- 19. 예외 처리
- 20. 예외 처리
- 21. 예외 처리
- 22. 예외 조항에서 예외 처리 발생
- 23. 예외 예외 처리 WCF + Silverlight
- 24. 예외 처리 후 예외 처리 Google C++ 테스트 프레임 워크
- 25. 자바 예외 처리 메서드
- 26. 파이썬 예외 처리
- 27. 웹 서비스 예외 처리
- 28. wxWidgets 예외 처리
- 29. 예외 처리 도움말
- 30. 마지막으로 예외 처리
귀하의 상황이 충분히 명확하지입니다. – sawa
처리 방법은 통화 사례에서 동일합니까? –