Q&A

  • Except를 안타는데요...ㅠ,.ㅠ
델프 초보임니당.

DivByZero 예외 처리를 해보려고 try-except 문을 아래처럼 코딩 했습니다

procedure TForm1.Button2Click(Sender: TObject);
var
i,j,divVal : Extended;
begin
i := 5;
j := 0;
   try
      divVal := i/j;
   except
      on EDivByZero do
        ShowMessage('0으로 나눌수 없습니다.');
   end;
end;

근데, 죽어도 안탑니다...-__-
데이터형은 integer 로도 해보고 / 대신 div 도 써봤습니다...

시스템 오류메세지가 떠버립니다....
이거 막고 싶은데요, 어찌해야 하나요, 예외 처리를 하기 위해
써야하는 클래스가 있습니까?
예외처리는 os가 지원해야 한다는 소리를 들은것 같기도 한데요...
이 왕초보에게 가르침을 주십시오...

3  COMMENTS
  • Profile
    최용일 2003.04.24 02:57
    안녕하세요. 최용일입니다.

    델파이 IDE에서 말고 탐색기에서 실행해보세요... 제대로 될겁니다...

    델파이 IDE에서도 보실려면 Tools/Debugger Options메뉴의 Language Options탭에서 Stop on Delphi Exceptions를 체크해제하세요...

    그리고 실수연산에서 0으로 나눌때 발생하는 예외는 EDivByZero가 아니라 EZeroDivide입니다.

    또한 divVal에 값을 대입한 뒤에 divVal변수를 전혀 참조하지 않기 때문에 divVal := i/j; 이 부분은 컴파일할때 완전히 빠져버립니다. 델파이가 필요없는 코드들은 옵티마이즈해서 빼버리기 때문에....
    이걸 실행하실려면 Project/Options메뉴의 Compiler탭에서 Optimization을 체크해제하세요...

    ^^ 항상 즐코하세요...

  • Profile
    김혜영 2003.04.24 03:11
    빠른 답변과,,,, 상세한 설명 감사드립니다.
    진짜 자주와서 물어보게 될거 같으데요 ^^;;
    그래도 되져? ^_______^

    그런데 또 궁금한게요...
    참조를 전혀 하지 않는다는게 무슨 말씀인지...^^;;

    try 안에서 예외 발생할 만한  i/j  을 넣어놓고 예외가 발생하니까
    except 문에서 메세지를 띄우는 일을 하는게 아닌가요?
    쿠... 어렵네용... 머가먼지 ㅡㅡ;
    한번더 설명해 주심.. 감사하겠는데염... ^^ 염치 없슴돠....
  • Profile
    최용일 2003.04.24 03:54
    안녕하세요. 최용일입니다.

    divVal이라는 변수는 계산하고서 그 값을 전혀사용하지 않잖아요... 사용하지도 않은데 굳이 계산할 필요가 있을까요? 때문에 델파이가 이러한 코드들을 빼버리는 겁니다...

    옵티마이즈옵션을 체크안하면 이렇게 사용하지 않은것들도 컴파일하게 되죠...

    예외만 띄우실려면 이러한 계산할필요 없이 raise문을 쓰시면됩니다../

      try
        raise EDivByZero.Create('');
      except
        on EDivByZero do
          ShowMessage('예외가 발생했습니다.');
      end;

    ^^ 항상 즐코하세요...