다른 언어와 마찬가지로 중요한 프로그램의 경우 실제로 예외 처리를 위해 잘 고려 된 아키텍처가 필요합니다. 한 가지 방법은 프로젝트 내에서 예외 처리 범위를 정의한 다음 일반적으로 범위 경계에서 예외를 잡아 내고 싶습니다. 절충안이 있습니다. 예외가 발생한 곳까지 스택에 가까울수록 트리거 한 조건에 대한 상황 별 정보가 많아집니다. 너가 너무 세분화하려고하면, 너는 너가 기술 한 문제로 달린다. 반면에 스택의 맨 위에있는 예외 ("main") 만 잡으면 아무런 문맥도 없습니다. 그래서 예외 처리 범위를 정의하는 것은 특정 프로그램이나 시스템과 관련하여 그 거래를 평가하는 것을 포함합니다.
루비는 "재시도"기능을 제공합니다. 다른 언어에서는 사용할 수 없습니다. 이것은 가급적 사용해야합니다! 그러나 (예를 들어, 네트워크 또는 리소스가 해제 될 때까지 기다리는 것과 같은) 의미가있는 경우, 그러한 예외는 매우 국부적으로 처리 될 필요가있다.
그렇지 않으면 대형 프로젝트에서 상당히 조잡한 수준에서 예외 범위를 정의하는 경향이 있습니다. 예외가 출현 지점에서부터 다양한 예외 범위 경계까지 버려지기 때문에 상황 정보를 캡처하는 것이 종종 유용합니다. 이를 돕기 위해, 애플리케이션 고유의 예외 유형 중 일부를 정의하여 Ruby 예외 클래스 계층 구조를 확장 할 수 있지만 또 다시 절충점이 있습니다. 프로젝트에는 사용자 정의 예외 유형을 사용할 때와 메시지 필드에서 상황에 맞는 데이터를 캡처하는 경우, 메시지 필드에 어떤 종류의 정보를 포함시켜야하는지 등에 대한 명확한 표준과 코드에서 생성 할 수있는 메시지를 카탈로그 화하는 전략이 있어야합니다.
대부분의 경우 예외는 중앙 집중식 처리기로 전파되고, 기록되고 (기술 팀 및 지원을 위해), 사용자에게 유용한 오류 메시지를 생성하고, 조건이 충분히 심각한지 여부를 결정하도록 허용 될 수 있습니다 프로그램을 종료해야합니다. 일반적으로 모든 예외는 코드 또는 사용중인 응용 프로그램 프레임 워크에서 처리해야합니다. 예외는 언어 런타임이나 OS의 기본 예외 처리에서 벗어나지 않아야합니다.
이들은 다른 언어의 경험을 바탕으로 한 나의 생각이지만, 일반적으로는 꽤 많이 적용된다고 생각합니다. 결론적으로, 대형 프로젝트에서는 예외 처리를 설계하는 데 많은 노력을 기울일 필요가 있습니다.
예외가 발생하는 경우 일반적으로 Ruby *가 자동으로 계속 진행할 수없는 문제가 있기 때문입니다. 그것이 구조대를 가지고있는 요점입니다. – Gareth
질문에 맞는 코드를 만들 수 있다면 코드 스 니펫을 사용하면 예외적으로 예외가 필요한지 여부를 판단 할 수 있습니다. –