나는 일반적으로 대부분의 코드 분석 경고에 동의하며이를 준수하려고합니다. 그러나 나는 이것으로 어려움을 겪고있다.
CA1031 : 일반 예외 유형을 포착하지 마십시오
이 규칙의 근거를 이해합니다. 그러나 실제로 예외 발생에 관계없이 동일한 조치를 취하려면 왜 각각을 구체적으로 처리해야합니까? 또한 특정 예외를 처리하는 경우 나중에 호출하는 코드가 변경되어 새로운 예외가 발생하면 어떻게됩니까? 이제 새 예외를 처리하기 위해 코드를 변경해야합니다. 반면에 단순히 Exception
코드 를 잡았다면 변경할 필요가 없습니다.
예를 들어, Foo가 Bar를 호출하고 Foo가 Bar에서 발생한 예외 유형에 관계없이 처리를 중지해야하는 경우, 내가 잡는 예외 유형에 대해 구체적으로 지정하면 어떤 이점이 있습니까?
아마도 더 좋은 예일 것입니다.
public void Foo()
{
// Some logic here.
LogUtility.Log("some message");
}
public static void Log()
{
try
{
// Actual logging here.
}
catch (Exception ex)
{
// Eat it. Logging failures shouldn't stop us from processing.
}
}
여기서 일반적인 예외를 잡지 않으면 가능한 모든 유형의 예외를 잡아야합니다. 패트릭은 OutOfMemoryException
이런 식으로 다루어서는 안된다는 좋은 지적 이 있습니다. 모든 예외를 무시하고 싶다면 어떻게해야 OutOfMemoryException
합니까?
OutOfMemoryError
, 그 Exception
이유 는 상속 트리 와는 별개입니다
OutOfMemoryException
? 다른 모든 것과 같은 취급 코드?