PAYATHON 2026

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 引擎为准。

备注:内容仅供参考。