如何捕获Perl MongoDB驱动程序上的连接错误?

如何捕获Perl MongoDB驱动程序上的连接错误?,mongodb,perl,Mongodb,Perl,我正在使用一个用于与mongodb合作的。要捕获和处理错误,需要使用Try::Tiny和Safe::Isa模块。然而,它并没有像预期的那样工作。请检查下面的代码,这些代码应该根据文档工作,但实际上不工作: use MongoDB; use Try::Tiny; use Safe::Isa; my $client; try { $client = MongoDB->connect('mongodb://localhost'); $client->connect; }

我正在使用一个用于与mongodb合作的。要捕获和处理错误,需要使用
Try::Tiny
Safe::Isa
模块。然而,它并没有像预期的那样工作。请检查下面的代码,这些代码应该根据文档工作,但实际上不工作:

use MongoDB;
use Try::Tiny;
use Safe::Isa;

my $client;

try {
    $client = MongoDB->connect('mongodb://localhost');
    $client->connect;
} catch {
    warn "caught error: $_";
};

my $collection = $client->ns('foo.bar');

try {
  my $all = $collection->find;
} catch {
  warn "2 - caught error: $_";;
};
只要连接是根据文档自动建立的,
connect()
就不会有例外。但也没有例外的要求!我还向连接添加了
$client->connect
字符串,但同样没有例外。我在未安装mongodb且未运行mongodb docker容器的机器上运行此脚本,因此肯定会出现异常


有人能解释一下我做错了什么吗

这是一个微妙的问题
find
返回游标对象,但不会立即发出查询。从以下文件中:


似乎
connect
不会抛出异常,所以您没有什么要捕获的<代码>perl-MMongoDB-E'说$client=MongoDB->connect(“mongodb://nosuchhost");假设$client->ns(“foo.bar”)->find'输出是
MongoDB::MongoClient=HASH(0x3af37c8)MongoDB::Cursor=HASH(0x3590010)
正如您所看到的,没有MongoDB::Error对象您可以删除所有那些
try
/
catch
块。代码不会抛出异常;即使没有mongo服务器,它也认为一切都很好。显然这不是一个错误。在没有Mongo DB的OSX上确认。我会认为这是一个bug。在官方Bug跟踪器中创建了一个问题,等待审查。
Note, a MongoDB::Cursor object holds the query and does not issue the
query to the server until the `result` method is called on it or until
an iterator method like `next` is called.