如果抛出某个异常,如何使我的 FreePascal 应用程序以特定代码退出?

How to make my FreePascal app exit with a specific code if a certain exception is thrown?

我的程序有一个 ESyntaxError class,我这样使用:

raise ESyntaxError.Create(Message)

我有 ESyntaxError class 定义如下:

ESyntaxError = class(Exception)

我观察到如果调用了 ESyntaxError.Create(Message) 代码,我的程序的退出代码将设置为 1。但是在这种情况下我想将其设置为 65.

我试过这样做:

ExitCode := 65;
raise ESyntaxError.Create(Message);

...但是我的应用程序仍然以 1 而不是 65 退出——我猜是因为内置的 Exception class 总是重置 ExitCode1? (不确定情况是否如此,在 the Exception docs 中没有看到任何明确说明,但我从我在这里观察到的行为推断出这一点)。

或者如果我想以非 1/非 0 退出状态结束程序,我是否应该以其他方式处理此问题而不是基于 Exception?

这可行:您可以将主例程包装在 try-except 块中,然后为特定类型的异常分配 ExitCode

program project1;

uses
  SysUtils;

type
  EMy = class(Exception);

procedure run;
begin
  raise EMy.Create('lel');
end;

begin
  try
    run;
  except
    on e: EMy do
    begin
      ExitCode := 65;
    end;
  end;
end.