Pascal Script 的 except 块中 break 为何未退出循环?
数据小许
结论
从给出的输出看,except 捕获了 I = 0 时的除零异常,但其中的 break 没有终止循环。仅凭这段脚本,无法判断原因是 Pascal Script 引擎限制、版本差异还是宿主环境行为。Delphi 中的结果也不能说明 Pascal Script 的控制流实现相同。
可以用布尔变量控制 while 循环:在异常处理器中设置退出标记,让循环在下一次判断条件时结束。
改用退出标记控制循环
保留现有变量声明和宿主提供的 Writeln、IntToStr,将循环部分改为:
I := 0;
StopLoop := False;
while (I <= 10) and (not StopLoop) do
begin
try
Writeln(IntToStr(I));
K := 2;
J := K / I;
except
Writeln('error');
StopLoop := True;
end;
if not StopLoop then
I := I + 1;
end;
还需要声明布尔变量 StopLoop。当 I = 0 时,脚本先输出 0,随后除法触发异常。except 输出 error 并将 StopLoop 设为 True,循环条件随之不成立,循环结束,不会继续输出 1 到 10。
注意事项
J := K / I 在 I = 0 时触发的异常类型,可能因 Pascal Script 引擎和宿主环境而异。这个处理方式只要求异常能够进入 except,不依赖特定的异常名称。如果仍要使用 for 循环,可以先记录退出标记,再在异常处理块之后处理循环控制。具体支持情况以当前 Pascal Script 引擎为准。
备注:内容仅供参考。
