使用这样的例外是否有风险?

Nas*_*out 0 delphi exception

我有以下功能

function calculate(s:string):integer;
begin
  try
    strtoint(s);
    do_something;
  except
    result:=-1;    
  end;
end;
Run Code Online (Sandbox Code Playgroud)

使用这样的例外会有什么后果吗?

Dav*_*nan 7

如果目的是检查输入字符串的有效性,那么有比异常处理程序更好的方法.要从字符串转换为整数并检测无效输入,请使用TryStrToInt:

var
  value: Integer;
... 
if TryStrToInt(s, Value) then
  Result := ...
else
  Result := -1;
Run Code Online (Sandbox Code Playgroud)

True如果字符串可以转换为整数,则返回此函数;如果是,则通过第二个参数返回整数,out参数.否则函数返回False.在您的代码中,您忽略转换后的整数值,但如果需要,它可用.

在我看来,这比异常处理程序更受欢迎,因为它更加明确和简洁.更不用说避免引发和捕获异常的性能开销.

当然,您的代码将检测除无效字符串以外的其他故障.一个潜在的错误来源是您的do_something程序.如果您真的想要吞下该过程引发的任何异常,则需要一个异常处理程序.但是,我更倾向于怀疑你的原始意图更有可能只捕获无效的字符串输入.在这种情况下,您的代码不正确.

另一个错误来源是如果s恰好是无效的字符串变量.但如果发生这种情况,那么你的程序的整个基础都会从你的下方拉出来,我个人认为你不应该期望优雅地处理这些场景.

建议您的部分问题是您的代码可能不具有真正的代表性.例如,如果输入有效,它似乎不设置返回值.我们不确定您的异常处理程序的意图是什么.我猜你的意思是在调用中捕获错误,StrToInt但我无法确定.