在Perl中捕获SQL连接的异常

时间:2017-07-02 18:47:07

标签: perl

使用Ensembl Perl API,有一个load_registry_from_db函数连接到SQL服务器。据说它会引发连接超时的异常。

 $registry->load_registry_from_db(
  -host    => 'ensembldb.ensembl.org',
  -user    => 'anonymous',
  -verbose => '1'
);
  

异常:如果无法连接给定的MySQL数据库,则抛出该异常                  或者在查询数据库时出现任何错误。

我想知道如何通过Perl捕获该异常?它写在eval是最好的页面上。那是eval {$registry}吗?

1 个答案:

答案 0 :(得分:2)

您绝对可以使用eval

my $statement_ok = eval {
    $registry->load_registry_from_db(
        -host    => 'ensembldb.ensembl.org',
        -user    => 'anonymous',
        -verbose => '1'
    );
    1;
};

if (! $statement_ok){
    # handle error
    do_something() if $@ =~ /.../;
}

我更喜欢这样做的原因是其他东西可能有或可能破坏$@,所以使用true语句将确保即使已经设置了$@,你也确定在该代码中捕获了特定的异常。

基本上,如果调用没有抛出,$statement_ok将为真。

你也可以使用Try::Tiny这样的外部库,但我必须承认,我从来没有使用过这样的东西,我总是坚持使用eval