catch 블록과 finally 블록 모두 예외를 throw하면 어떻게됩니까?catch 블록과 finally 블록 모두 예외를 throw하면 어떻게됩니까?
답변
블록이 블록에서 예외를 throw하면 catch
블록에서 발생한 예외를 효과적으로 숨길 것이며 궁극적으로 던져 질 것입니다. 따라서 catch 할 때 예외를 기록하거나 finally 블록 자체가 예외를 throw하지 않는지 확인하는 것이 중요합니다. 그렇지 않으면 숨겨 지거나 표시되지 않는 예외가 발생할 수 있습니다.
그냥 시도 내 내부 코드에서 모든 예외 메시지를 제어 할 수 있도록 유혹되었습니다. 개별적으로 예외를 throw합니다. –
마지막으로 발생 된 예외가 발생합니다.
그것의 이미 adrianbanks가 아니라 답을하지만, 다음과 같은 게시물을 흥미 있어야한다 : Interesting Exception Results: Throwing Exceptions From the Finally Block
블로그에 주석을 추가했지만 CLR이 필터 단계에서 처리되지 않은 예외 (VB.NET의 'When' 절이 처리 될 때)를보고하기 때문에 콘솔 응용 프로그램 결과가있는 것 같습니다. 아마도 디버거가 호출되어 첫 번째 예외의 행을 찾을 수 있습니다. 'throw '전에'finally'에 무엇인가를 출력하는 것이 가장 간단합니다. 첫 번째 예외가 기록 된 후'finally'가 처리되고 두 번째 예외가 기록됩니다. 이 기능은 .NET Framework 1.1에서 3.5까지 사용할 수 있습니다. .NET 4.0은 첫 번째 예외 만보고합니다. (1.0 & 4.5는 이용 가능하지 않습니다.) –
HI Nwaman 난 당신이 내가 창문 appliaction에서 테스트 한 잘못 대답 생각, u는 같은 프로그램을 작성하는 경우 내가 발견 캐치와 finally 블록 모두 가능 중첩 패턴 | 한
try
{
string s = "hu";
int i = int.Parse(s);
}
catch (Exception ex)
{
string s = "hu";
int i = int.Parse(s);
throw new Exception();
}
finally
{
MessageBox.Show("hi");
}
이의 원인이되지 않습니다 마지막으로 excute에 아래,
흠, 방금 해봤 고 마침내 실제로 실행되었습니다. – agentnega
은 다른 조합은 거기에 있습니다. 생각하고있는 상황을 설명하기 위해 코드 스 니펫을 추가 할 수 있습니다. –
@ Justin : (이 사실을 알리는 지 확신 할 수 없습니다.) (1) Java를 제거하여 질문의 범위를 크게 변경하고 (2) VB를 추가했기 때문에 태그 변경 내용이 취소되었습니다. NET, 여러 측면에서 올바른 동안, 여기에 일을하는 방식이 아닙니다 ... (즉, 나는 그것에 동의하거나 C#을 제거하고 .NET이 있음을 확인합니다). –
@MarkHurd 문제는 하나 이상의 답변이 .Net의 특정 솔루션에 링크되어 있다는 것입니다. Java의 답변의 유효성에 대해서는 말할 수 없습니다. 또한 다른 VB.Net 질문에는이 질문에 대한 링크가 있습니다 (대답은 동일하므로). – Justin