Gen*_*neQ 17 error-handling perl coding-style perl-critic
perlcritic投诉,以下代码,一些样板DBI的东西完全正常,应该croak
代替die
:
# Connect to database
my $db_handle = DBI->connect( $url, $user, $password ) or die $DBI::errstr;
Run Code Online (Sandbox Code Playgroud)
所有这些,虽然死对我来说似乎很好.
我会想到一个武士Perl战士,当事情出错时,呱呱声不如实际死亡.开玩笑
我为什么要croak
代替die
?
不听取perlcritic建议的后果是什么?
Adr*_*ith 31
来自http://www.perlmonks.org/?node_id=685452
当错误是您或您的代码没有正确执行时,您使用die.当你的来电者做得不对时,你会使用呱呱叫.死"错误:$!" 表示错误发生在发生错误的行上.呱呱叫"错误:$!" 表示错误在调用者调用您的代码的行上.
在这种情况下,错误(连接到DB的错误)与调用者无关,而且与建立连接的行有关,所以我会使用die
.
我通常使用以下内容:
die "string"
对于您希望直接与用户通信的致命消息.我主要是在脚本中这样做.die $object
对于完整的异常对象,尽管大多数异常类都有throw
为您执行此操作的方法.这适用于您的调用者应该能够判断您抛出的错误类型,甚至可能从中提取信息.如果您正在使用Moose,请查看Throwable和Throwable-Xcroak "message"
就像Adrian所说的那样,当你的用户做错了什么时,你想要在你的代码中报告错误.函数和API级别方法通常都是这种情况.confess "message"
对于库错误,我还没有看到异常的用处.这些通常是您认为是错误的运行时错误,而不是异常情况.为这些使用异常是有意义的,特别是如果您有一个已经使用异常的大型项目.但这是一个很好,很好,简单的方法来获得错误的堆栈跟踪.