Mik*_*ike 14 error-handling perl
我正在学习Perl,在很多例子中,我看到错误都是这样处理的
open FILE, "file.txt" or die $!;
Run Code Online (Sandbox Code Playgroud)
是die在脚本中间确实处理错误的最好方法?
fri*_*edo 21
die在脚本中间是否合适取决于你正在做什么.如果它只有几十行,那就没关系了.一个有几百行的小工具,然后考虑忏悔(见下文).如果它是一个包含大量类和互连代码的大型面向对象系统,那么异常对象可能会更好.
承认鲤鱼包:
通常导致死亡的错误不在报告的线上.用confess替换die(参见Carp包)将给出堆栈跟踪(我们如何到达这一行),这极大地有助于调试.
为了处理来自Perl builtins的异常,我喜欢使用autodie.它可以捕获来自open和其他系统调用的失败,并且会为您抛出异常,而无需执行此or die操作.eval { }使用Try :: Tiny可以使用或更好地捕获这些异常.
cod*_*lic 13
由于我几乎在任何地方使用Log :: Log4perl,我使用$logger->logdie而不是die.如果您想要更好地控制异常,请考虑Exception :: Class.
最好用Try :: Tiny捕获异常(参见其文档原因).
除非你有一个更具体的想法,那么肯定要在意想不到的事情发生死亡.
因无法打开文件并提供文件名而死亡比系统告诉您无法读取或写入匿名未定义更好.
如果你在谈论一个"脚本",通常你会谈论一段非常简单的代码.不是需要协调的层(通常不是).在Perl 模块中,有一个伴随的想法是你不拥有执行环境,所以要么主要软件关心并且它在eval中捕获事物,要么它并不真正关心和死亡会没事.但是,你应该尝试更强大一点作为模块,然后传回undefs或者其他东西.
你可以捕捉到eval块中的任何死亡(或呱呱叫).你可以在那里进行更具体的处理.
但如果你想检查$!然后编写该代码,您将获得更具体的解决方案.
看看近乎普遍的使用标准strict.那段代码死于可疑的语法,而不是让你继续.
所以我认为一般的想法是:是的,DIE除非你对如何处理事情有更好的了解.如果你有足够的远见,你可以原谅你不死的一两次,因为你知道你不需要.