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

sid*_*ker -4 pascal freepascal exception exit-code

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

\n\n
raise ESyntaxError.Create(Message)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我将该ESyntaxError类定义如下:

\n\n
ESyntaxError = class(Exception)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我观察到,如果ESyntaxError.Create(Message)调用了该代码,我的程序\xe2\x80\x99s 退出代码将设置为1. 但在这种情况下我希望将其设置为65.

\n\n

我尝试这样做:

\n\n
ExitCode := 65;\nraise ESyntaxError.Create(Message);\n
Run Code Online (Sandbox Code Playgroud)\n\n

...但是我的应用程序仍然只是以 退出1,而不是65\xe2\x80\x94 我猜是因为内置Exception类总是重置ExitCode1?(Don\xe2\x80\x99t 确实知道 \xe2\x80\x99 是这种情况,并且在异常文档中没有看到任何明确说明这一点,但我从我在这里观察到的行为推断出这一点)。

\n\n

或者,如果我想让程序具有非1/非0退出状态,我是否应该以其他方式处理这个问题而不是基于它Exception

\n

hin*_*nst 5

这是可行的:您可以将主例程包装在 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.
Run Code Online (Sandbox Code Playgroud)