如果抛出某个异常,如何使我的 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 总是重置 ExitCode
到 1
? (不确定情况是否如此,在 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.
我的程序有一个 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 总是重置 ExitCode
到 1
? (不确定情况是否如此,在 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.