gpt4 book ai didi

perl - 为什么即使我已将 DBI 调用包装在 eval 中,我仍会在控制台上看到 DBI 错误?

转载 作者:行者123 更新时间:2023-12-03 18:16:55 29 4
gpt4 key购买 nike

我有一个在 eval 中运行的数据库查询,以捕获错误。问题是错误消息正在输出到控制台,即使它被困住了。如何阻止错误消息执行此操作,因为我想自己解析它并吐回我自己的消息?

my $dbh = DBI->connect('dbi:Pg:dbname=database;host=localhost',
'user', 'pass',
{RaiseError => 1}
);

eval{
$sth = $dbh->prepare($sql);
$sth->execute;
};

if($@){
#Do my parse/print stuff here I know
}

最佳答案

捕获和忽略错误不是一个好主意,无论它们是否致命。此外,不建议以您的方式检查 $@ (请参阅本网站上有关 perl 异常的问题,以获得更好的捕获异常的方法;我在下面使用 Try::Tiny,这可以说是最轻量级的路由全部)。

当较早的操作可能失败时,不要继续执行 DBI 操作,您应该在每个步骤中检查错误情况:

use strict; use warnings;
use Try::Tiny;

try {
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute or die $sth->errstr;
} catch {
print "got error $_\n";
# return from function, or do something else to handle error
};

请记住,始终 use strict; use warnings;在每个模块和脚本中。您的代码摘录表明您还没有这样做。

关于perl - 为什么即使我已将 DBI 调用包装在 eval 中,我仍会在控制台上看到 DBI 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205004/

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