真的很郁闷!!!!!!!!!!!!!!!!!!!!!!!!这个是帮助里的代码,也不行: Exceptions are handled within try...except statements. For example,try X := Y/Z; except on EZeroDivide do HandleZeroDivide; end;This statement attempts to divide Y by Z, but calls a routine named HandleZeroDivide if an EZeroDivide exception is raised.
div 和除号....你觉得这个是一样的么.....如果你认为是一样的...那你就继续发火吧.
procedure TForm1.Button1Click(Sender: TObject); var x,y,z:integer; begin x:=0; y:=0; z:=2; z:=x div y; end; 因为你的变量Z在赋值之后并没有使用,所以编译器在优化的过程中把你的最后两条语句干掉了,最后两条语句被干掉后,编译器又发现对X,Y的赋值后并没有使用,于是对X,Y的赋值语句也同样被优化掉了,你的工程实际上是空的,当然不会出异常了,改成以下的看看,肯定会出异常procedure TForm1.Button1Click(Sender: TObject); var x,y,z:integer; begin x:=0; y:=0; // z:=2; z:=x div y; showmessage(inttostr(integer(z))); end;
to firstshine(黑里透红) :真是厉害!!!其实我原先就已经用你的方法试了,只不过我找不到理由,原来是这么回事!!太感谢了。 但我还有个问题:procedure TForm1.Button1Click(Sender: TObject); var x,y,z:integer; begin x:=10; y:=0; z:=1; try z:=x div y; ShowMessage(inttostr(z)); except on e:EDivByZero do ShowMessage(E.ClassName); end; end;它能出异常,但却不能被捕获!!!
to firstshine(黑里透红) ,我刚才又试了,把编译选项里的,Code Optimization 去掉后,果然下面的代码弹出异常:procedure TForm1.Button2Click(Sender: TObject); var x,y,z:integer; begin x:=20; y:=0; z:=5; z:=x div y; //ShowMessage(IntToStr(z)); //x:=z+6; end;
to firstshine(黑里透红):我的意思是,程序弹出异常对话框,被异常终止,却没有执行后面的on e:EDivByZero do ShowMessage(E.ClassName);
Exceptions are handled within try...except statements. For example,try
X := Y/Z;
except
on EZeroDivide do HandleZeroDivide;
end;This statement attempts to divide Y by Z, but calls a routine named HandleZeroDivide if an EZeroDivide exception is raised.
var
x,y,z:integer;
begin
x:=0;
y:=0;
z:=2; z:=x div y;
end;
因为你的变量Z在赋值之后并没有使用,所以编译器在优化的过程中把你的最后两条语句干掉了,最后两条语句被干掉后,编译器又发现对X,Y的赋值后并没有使用,于是对X,Y的赋值语句也同样被优化掉了,你的工程实际上是空的,当然不会出异常了,改成以下的看看,肯定会出异常procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=0;
y:=0;
// z:=2; z:=x div y;
showmessage(inttostr(integer(z)));
end;
但我还有个问题:procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=10;
y:=0;
z:=1;
try
z:=x div y;
ShowMessage(inttostr(z));
except
on e:EDivByZero do ShowMessage(E.ClassName);
end;
end;它能出异常,但却不能被捕获!!!
,我刚才又试了,把编译选项里的,Code Optimization 去掉后,果然下面的代码弹出异常:procedure TForm1.Button2Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=20;
y:=0;
z:=5;
z:=x div y;
//ShowMessage(IntToStr(z));
//x:=z+6;
end;