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

时间:2015-12-24 05:36:41

标签: exception pascal freepascal exit-code

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

raise ESyntaxError.Create(Message)

我的ESyntaxError类就像这样定义:

ESyntaxError = class(Exception)

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

我试过这样做:

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

...但是我的应用程序仍然只退出1,而不是65 - 我猜是因为内置的Exception类始终将ExitCode重置为{ {1}}? (不确定是这样的,并且在the Exception docs中没有看到任何明确说明的内容,但我从我在这里观察到的行为推断出来。)

或者,如果我想最终得到具有非1 /非1退出状态的程序,我是否应该以其他方式处理此问题而不是基于{{1 }}?

1 个答案:

答案 0 :(得分:4)

这样做:你可以在try-except块中包装main例程,然后为特定类型的异常分配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.