加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

德尔福.在整个代码中使用try / except.邪恶?

发布时间:2020-12-15 04:35:01 所属栏目:大数据 来源:网络整理
导读:这是一个相当理论的问题. 我在最近的一个项目中遇到过这种做法 – 几乎每个过程和函数都包含在try / except子句中,如下所示: function TMyClass.DoFoo(aBar: Integer): Boolean;begin try .. do something .. // Proper checks for common errors inside Re
这是一个相当理论的问题.

我在最近的一个项目中遇到过这种做法 – 几乎每个过程和函数都包含在try / except子句中,如下所示:

function TMyClass.DoFoo(aBar: Integer): Boolean;
begin
  try
    .. do something .. // Proper checks for common errors inside
    Result := True;
  except
    LogException(ClassName + '.DoFoo'); // Write exception to log
    Result := False; // Indicate function did not performed what it was asked for
    // Exit without re-raising exception
  end;
end;

procedure TMyClass.Buzz(Sender: TObject);
begin
  try
    .. do something .. // Proper checks for common errors inside
  except
    LogException(ClassName + '.DoFoo'); // Write exception to log
    // Exit without re-raising exception
  end;
end;

这看起来像很多重复.但是我可以看到它背后的某种逻辑.如果将每个过程和函数包装到try ..except中,您将知道异常的大致位置,并让程序继续工作而不会向用户弹出崩溃消息,而是将它们写入日志以供将来分析.

然而,这种做法被认为是邪恶的.究竟是为什么呢?

编辑:

>这是一个关于我将要合作的项目的问题,我自己并没有发明它
>我很了解madExcept,我在其他项目中使用它
>该项目中的职能和程序照常布置,没有迹象表明程序被编写为仅用于替换异常流程的功能

解决方法

为什么这是一个简单可怕的想法有各种各样的原因.

异常处理现在推动了所有功能的设计.他们现在都需要返回布尔值.任何实际返回值都必须通过输出参数.这将破坏您的代码的可读性和功能的可组合性.

现在,您需要检查所做的每个函数调用的返回值,并向上传播该异常.因此,您放弃了异常处理的所有好处.关于异常的好处是你可以在很大程度上将正常流量与异常流量分开.根据您提出的改变,前方和中间的特殊流量.

另一个大问题是你强制代码尽早处理错误.但是引发异常的代码可能无法处理错误.如果让错误向上浮动,那么代码可以在能够执行此操作时处理错误.

如果您希望程序记录错误的详细信息,而不是向用户显示消息,则可以通过异常处理轻松实现.您可以使用madExcept,EurekaLog或JclDebug等工具来帮助完善日志记录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读