我平时写程序几乎没有用过异常处理,
我知道这样很不好。
大家讨论一下在什么样的情况下
需要用异常处理。说得详细一点,呵呵。

解决方案 »

  1.   

    面向对象,实例的动态建立
    try
      mm.create(..);
      ...
    finally
      mm.free;
      ...
    end;
      

  2.   

    有很多形式的:
    1。try
    .....(正常处理)
    except
    .....(发生异常处理)
    end;2。 try
    ......(正常处理)
    finall
    .....(最后处理)3。try
    ......正常处理1)
          try
    .......正常处理2)
          except
    .......异常处理1
          end;
        expect
    .......异常处理2
    end;4。try
          try
          finall
          end;
        finall
       end;
    5.try
      ......  
        try
     ........
        except
     ........
        end;
     ........
       finally
     ........
      end;
      

  3.   

    最近写了一个播放背景音乐的程序段.
    mediaplayer经常要被打断,或者要读取下一首歌曲,如果再没有歌曲名的情况下play了,就会报错,我也是头一次用异常处理,结果写了一大堆代码,很麻烦.
    以下是其中一段,勉强不保错了(试验了12小时),请高手指点,看有没有冗余的地方.procedure TForm1.BJWAVTimer(Sender: TObject);
     VAR WAVFILE:STRING;
    begin   IF ((MEDIAPLAYER1.Mode =mpStopped) AND (WAVPAUSE=false)) OR (MEDIAPLAYER1.FileName ='') THEN
         BEGIN
            //showmessage('dds');
            WAVFILE:=MYINIFILE.ReadString('音乐',INTTOSTR(WAV_NO),'0');
            IF (WAVFILE<>'0') AND (WAVFILE<>'') THEN
               BEGIN
                   try
                     MEDIAPLAYER1.FileName :=WAVFILE;
                     MEDIAPLAYER1.Open;
                   except
                     on EMCIDeviceError do
                       begin
                         try
                         mediaplayer1.FileName :='';
                         except
                         end;
                       end;
                   end;
                  TRY
                    MEDIAPLAYER1.Play ;
                  EXCEPT
                  ON E:EXCEPTION DO
                    BEGIN
                     IF E.Message ='No MCI Device Open' then
                        begin
                        mediaplayer1.FileName :='';
                        wav_no:=-1;
                        end;
                    END;
                  END;
                 WAV_NO:=WAV_NO+1;
          END ELSE
               BEGIN
                 WAV_NO:=0;
               END;
         END;
    end;
      

  4.   

    编写异常处理程序可以提高程序的可靠性和稳定性,如果要进行文件操作,数值运算,数据库操作,打印机操作,实例动态创建、释放等最好使用异常处理。一般用到的就是:
    try
    ....
    except
    ....
    end;try
    ....
    finally
    ....
    end;
      

  5.   

    on EMCIDeviceError do
                       begin
                         try
                         mediaplayer1.FileName :='';
                         except
                         end;
                       end;
    这里面的type..except..end就不需要了吧
      

  6.   

    当然你也可以利用异常处理一些事情!例如我刚开始用Delphi操作数据库时!我就利用异常来判断是否连通!数据表是否存在什么的!
      

  7.   

    如果你不做异常处理,那么Delphi就替你做了(比如弹出的Exception对话框).
      

  8.   

    NightCloud() :有时我的mci被上一次程序出错给占用了.我以为加这一句就可以了呢.哪些异常处理都是随便加的,属于有病乱投医.你既然提出来了,我试试看.
      

  9.   

    如果你能保证在任何情况下你的程序都没有问题。
    --异常处理岂不是画蛇添足么?
    --你能保证你的程序在任何情况下的不出错么?
    --不能!
    --所以,你需要异常处理。
    >>>很好!!!!!!
      

  10.   

    还有,如果你这条语句有错了,
                    MEDIAPLAYER1.FileName :=WAVFILE;
                     MEDIAPLAYER1.Open;
    下面的MEDIAPLAYER1.play还有意义吗,不是一样的报错?还不如合在一起procedure TForm1.BJWAVTimer(Sender: TObject);
    VAR 
      WAVFILE:STRING;
    begin
      IF ((MEDIAPLAYER1.Mode =mpStopped) AND (WAVPAUSE=false)) OR    
         (MEDIAPLAYER1.FileName ='') THEN
      BEGIN
            //showmessage('dds');
        WAVFILE:=MYINIFILE.ReadString('音乐',INTTOSTR(WAV_NO),'0');
        IF (WAVFILE<>'0') AND (WAVFILE<>'') THEN
        BEGIN
          try
            MEDIAPLAYER1.FileName :=WAVFILE;
            MEDIAPLAYER1.Open;
            MEDIAPLAYER1.Play ;
          EXCEPT
            ....
          end;
        END 
        ELSE BEGIN
          WAV_NO:=0;
        END;
      end;
    end;
      

  11.   

    NightCloud() :
    我知道我为什么那么写了,原因是我调试时,只要发现错误,就报错,而不是跳过去(编译完了运行就不这样),我就以为1条try语句 只管一句呢,本来想上这里来问的了,后来看到有人先发贴了,就没问.