送分:try except end的重复执行问题!

mygis 2001-10-30 10:01:59
try
Statement;
except
statement2;
end
我要Statement触发异常时再调用Statement,如果又异常再调用,直至9次后还异常,那么就执行statement2.该怎么写代码?请用代码示例一下!
...全文
297 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mygis 2001-11-02
  • 打赏
  • 举报
回复
谢谢!解决!
mygis 2001-11-02
  • 打赏
  • 举报
回复
谢谢!解决!
delphi_user 2001-10-31
  • 打赏
  • 举报
回复
最简单的方法,使用goto和label在加上计数器。不过不推荐。
另一种方法,用消息。当触发异常发送一个消息。而处理这个消息的方法就是statment。
消息中可以加上已经异常次数,这样即符合windows编程规范,又很结构化。

jimsuker 2001-10-31
  • 打赏
  • 举报
回复
sorry 打错了
int ExceptionFilter()
{
static int i;
i++;
if i <9
return EXCEPTION_CONTINUE_EXECUTION;//<-here 执行Statement
else
return EXCEPTION_EXECUTE_HANDLER;//<-here 执行statement2
}
try
{
...
}
except(ExceptionFilter())
{
...
}
jimsuker 2001-10-31
  • 打赏
  • 举报
回复
windows sdk的structured exception handling一定要看
jimsuker 2001-10-31
  • 打赏
  • 举报
回复
i know !:) see here
//it is windows structured exception handling
//c或c++的代码
int ExceptionFilter()
{
static int i;
i++;
if i >=9
return EXCEPTION_CONTINUE_EXECUTION;//<-here 执行Statement
else
return EXCEPTION_EXECUTE_HANDLER;//<-here 执行statement2
}
try
{
...
}
except(ExceptionFilter())
{
...
}
to get more infomation ,please see windows sdk;
g_ma 2001-10-31
  • 打赏
  • 举报
回复
var ec:integer; runok:boolean;
begin
.
.
ec:=0;runok:=false;
while (ec<10) and (runok=false) do
begin
try
Statement;
runok:=true;
except
ec:=ec+1;
runok:=false;
end;
end;
if (runok=false) and (ec>8) then Statement2;
.
.
这样可以吗?
g_ma 2001-10-31
  • 打赏
  • 举报
回复
var ec:integer; runok:boolean;
begin
.
.
ec:=0;runok:=false;
while (ec<10) and (runok=false) do
begin
try
Statement;
runok:=true;
except
ec:=ec+1;
runok:=false;
end;
end;
if (runok=false) and (ec>8) then Statement2;
.
.
这样可以吗?
bubble 2001-10-31
  • 打赏
  • 举报
回复
to zengyufeng(御风):
我很苯,麻烦你能不能解释一下raise是什么意思,Thanks!
zengyufeng 2001-10-31
  • 打赏
  • 举报
回复
var
i, ErrCount: integer;
try
ErrCount := 0;
for i := 1 to 9 do
try
Statement;
break; //执行成功就直接跳出循环了
except
ErrCount := ErrCount + 1;
end;
if ErrCount >= 9 then raise; //重新触发Statement2
except
Statement2;
end;
scripting 2001-10-30
  • 打赏
  • 举报
回复
gz
mygis 2001-10-30
  • 打赏
  • 举报
回复
以上的回答好像都不对!
问题再补充一下,如果statement没有触发异常,就执行end后的语句;如果有异常,再调用statement本身,之后没异常则执行end后的语句;如果又异常,再调用statement本身;如此statement的调用超过9次,则调用statement2。
chenjbjbjb 2001-10-30
  • 打赏
  • 举报
回复
我有一个烂办法
a := 1;
while
{
try
...
except
Inc(a)
end
}
if a >= 9 then statement2
cobi 2001-10-30
  • 打赏
  • 举报
回复
明白你的意思了,
try
statement

try
except
while i <= 9 do
begin
i := i + 1;
raise;
end;
end;
except
statment2;
end;
使用重新触发异常
煜知搬砖者 2001-10-30
  • 打赏
  • 举报
回复
申请一个全局变量var i:integer;

try
while i<=9 do
begin
Statement;
i:=i+1;
end;
except
statement2;
end

cobi 2001-10-30
  • 打赏
  • 举报
回复
你是希望触发异常的时候才调用Statement2吧,那这样写应该没有问题
如果你希望不管是否触发异常都调用Statement2,用try..finally,

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧