gpt4 book ai didi

perl - Perl 模块是否应该引发异常(死/呱呱)?

转载 作者:行者123 更新时间:2023-12-04 01:01:18 32 4
gpt4 key购买 nike

在编写 Perl 模块时,在模块内部使用 croak/die 是一个好习惯吗?

毕竟,如果调用者不使用 eval block ,模块可能会使调用它的程序崩溃。

在这些情况下,最佳做法是什么?

最佳答案

如果您指出某种错误,我通常更喜欢异常(exception)。否则,您必须花费更多时间在代码库的不同级别上散布错误处理代码,而不是将错误处理集中在系统的适当层中——除其他原因外。

你可以找到这个 old thread on perlmonks有用的读物​​。我将在下面复制我的评论 - 因为我大多同意我当时写的内容:-)

我喜欢异常(exception)的一些原因:

  • 稳健性。我可能忘记检查返回的错误值。我不能忘记检查异常。
  • 简洁。我更喜欢:
    $o->foo->bar->fribble->ni


    $o->foo or return(ERROR_FOO);
    $o->bar or return(ERROR_BAR);
    $o->fribble or return(ERROR_FRIBBLE);
    $o->ni or return(ERROR_NI);
  • 明晰。对于基于异常的代码,“正常”的控制流程更加明确,因为它不会被错误处理代码所掩盖。我认为上面两个代码示例中的第一个比第二个更直接地显示了代码的意图。
  • 关注点分离。错误条件和错误处理程序是不同的想法。
  • 您可能希望根据上下文以不同的方式处理错误。
  • 您可能也不知道在错误发生时应该如何处理它。
  • 您可能在编写代码时不知道应该如何处理错误。

  • 使用 return-error-code 样式,您最终不得不:
  • 将错误条件传播到可以决定如何处理它们的地方。
  • 将错误处理程序传播到可能发生错误的位置

  • 如果错误条件和错误处理程序之间存在许多级别的代码,这两个选项都会很快变得困惑。
  • 返回值和错误条件之间没有混淆。

  • 可能还有更多;-)

    关于perl - Perl 模块是否应该引发异常(死/呱呱)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542058/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com