2013-07-11 3 views
-1

일부 응용 프로그램에서는 의도적으로 예외를 먹는 몇 줄의 코드를 발견했습니다. 내 응용 프로그램에서 이렇게하는 이점은 - 예외를 무시하고 루프를 계속 진행하면됩니다 (처리되는 예외는 루프 내에서 발생하는 오류에 대한 것입니다). 다음 코드 줄은 숙련 된 개발자에게도 악의적으로 보입니다. 그러나 문맥에 민감합니다 (즉, 디렉토리의 모든 파일을 처리하는 것이 요구 사항입니다).개체 지향 프로그래밍에서 예외 무시

try{ 
    //some lines of code which might throw exception 
}catch(Exception e){ 
    //no code to handle the error thrown 
} 

예외를 무시하면 어떤 이점이 있습니까?

+0

OOPS 란 무엇입니까? 무슨 언어로 말하는거야? 어쨌든이 질문은 너무 광범위합니다. –

+0

예. 나는 내가 (RoR과 Java)를 위해 일하는 응용 프로그램에서이 의심을 가지고있다. – Arun

+0

유권자 :이 질문은 정말 시간을 낭비하는 질문입니까? – Arun

답변

3

모든 파일을 처리해야하는 경우, 그 중 하나를 처리하는 동안 예외가 발생하면 이미 요구 사항이 충족되지 않았습니까? 무언가 실패했거나 예외가 필요하지 않습니다.

처리를 계속하려면을 계속 처리하십시오. 왜 주어진 파일을 처리 할 때 문제를보고하는 것이 아니라 나중에 수동으로 처리 할 수 ​​있습니까? 아마 심지어 어리 석다 cerr << "Hey I had trouble with this file '" << file <<', so I skipped it.\n" 아무것도없는 것보다 낫지 않을 것입니다.

예외 신호가 있습니다. 만약 당신이 그것을 무시한다면 당신은 불쾌한 것을하고 있거나 예외는 필요하지 않습니다.

내가 생각할 수있는 예외를 무시하는 유효한 유일한 이유는 누군가 특별한 이유없이 예외를 throw했을 때뿐입니다. 그러면 어쩌면 무시할 수도 있습니다.

+0

응답 해 주셔서 감사합니다 luk32. 나는 이것이 틀렸다는 것을 알고있다. 그러나 예외를 무시하는 이점이 있는지 알고 싶습니다. – Arun

+0

분명히 무시하는 것은 매우 나쁜 습관이라는 4 가지 답변이 있습니다. 음 ... 긍정적입니다. 좋아, 적은 코드를 썼다. 좋습니다. 아마 1k 작업을 처리하고 5 작업 만 중단한다면 99.5 % 작업을 완료 할 수 있습니다. 그러나 당신은 모든 일을 끝내지 못할 것이고, 무엇이 잘못되었거나 어떻게 된 것인지를 알아야 할 것입니다. 왜 그 문제를 해결하지 않습니까? 나는 누군가가 당신에게 아무 이유없이 그것을 던지면 무시합니다. "자히의 대답입니다. 하지만 정말 나쁜 단어 :) – luk32

+1

''cerr <<에 대한 @ luk32 +1 이봐이 파일에 문제가 생겼어 ""<< << 파일이므로, 건너 뛰었습니다. \ n "' –

1

예외를 무시할 때의 이점이 없다고 생각합니다. 그것은 단지 문제를 일으킬 것입니다. 코드를 처리 한 후 루프에서 실행되도록하려면 예외가 처리되므로 루프가 계속됩니다. 예외를 처리 한 후에도 아무 것도하지 않더라도 디렉토리의 파일을 항상 처리 할 수 ​​있습니다.

당신이 예외를 먹을 경우 예외가

을 던져되는 파일에 대한 일부 로그를 작성하는 경우 그것은 더 좋을 것이다. 문제의 실제 원인을 정확히 알지 못할 수도 있습니다. Considerr 예외가 분열 중에 발생한 가치는 당신이 부문의 실제 결과를 얻을로되어있다 여기 x

에 할당되지 않은 것처럼 이것은 X 단순히 0 기본 값을 출력합니다

public class Test { 

    private int x; 

    public void someMethod(){ 

     try { 
      x = 10/0; 
     } catch (Exception e) { 

     } 
    } 
    public static void main(String[] args) { 
     Test test = new Test(); 
     test.someMethod(); 
     System.out.println(test.x); 
    } 

} 

이 예. 우리가 0으로 나누기 때문에 우리는 catch 블록에 아무 것도 쓰지 않았기 때문에 확실히 ArithMeticException을 던질 것입니다. 따라서 예외가 발생하면 아무 것도 출력되지 않고 x의 값은 항상 0이 될 것이고 분할이 발생했는지 여부를 알 수 없습니다. 따라서 항상 예외를 적절하게 처리하십시오.

+0

설명해 주셔서 감사합니다. 귀하의 답변은 정말 유용합니다 :) – Arun

+0

@ Arun 내 즐거움 남자 :) 도와 드리겠습니다 –

1

이것은 일반적으로 나쁜 코드의 표시입니다. 예외가 무엇인지보고하여 최소한 예외를 처리하려고합니다. 예외를 무시하면 프로그램이 계속 실행되지만 일반적으로 예외가 발생하고 사용자 또는 사용자가 그 이유를 알아야합니다. 캐치 올 (catch-all)과 이스케이프 처리 (escaping)는 코더가 문제가 발생해도 문제를 해결하기에는 너무 게으른 것을 의미합니다.

예외는 코더가 인수를 전달하기 위해 예외를 던지고있는 것입니다. 이는 DailyWTF에서 한 번 본 것입니다.

1

일반적으로 우리는 예외를 수용해서는 안되지만 일종의 추가 기능을 돕는 비즈니스 논리가없는 기능이있는 이유가있을 수 있습니다. 그런 다음 해당 기능이 중단되면 응용 프로그램이 중단되는 것을 원하지 않습니다 예외를 흡수하거나 먹는 경우에는 예외를 throw합니다. 그러나 빈 캐치 블록을 권장하지는 않습니다. 장래에 ELMAH 또는 다른 오류 로깅 도구에이를 기록해야합니다.

+0

글쎄, 전화 코드가 잘 설계된 경우 "추가 기능"예외는 모듈 내의 적절한 장소에서 처리하지 말아야합니까? 나는 빗나간 예외의 비전이 흘러 나오고 뭔가가 수렴하지 않았거나 뭔가 발견되지 않아 다른 방법으로 대체해야한다는 비전을 싫어합니다. 그러나 실제로 그것을 무시할 타당한 이유가 있습니다. – luk32

+0

을 입력하십시오. 예외로 인해 (발생하는 경우) 응용 프로그램이 중단되면 처리합니다. –

관련 문제