Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl eval{}语句中的跳过错误_Perl_Api - Fatal编程技术网

Perl eval{}语句中的跳过错误

Perl eval{}语句中的跳过错误,perl,api,Perl,Api,我正在尝试使用PerlAPI从网站中提取数据。我正在使用URI列表从网站获取数据 最初的问题是,我希望它跳过那个特定的URI,转到下一个可用的URI。我使用了next,除非来解决这个问题 现在的问题是,我试图通过从API调用一个特定的方法(称为identifiers())从web中提取特定的数据。现在URI的数据是可用的,但是我正在寻找的特定数据(标识符)是不可用的,并且它会消失 我试着像这样使用eval{} eval { for $bar ($foo->identifiers()

我正在尝试使用PerlAPI从网站中提取数据。我正在使用URI列表从网站获取数据

最初的问题是,我希望它跳过那个特定的URI,转到下一个可用的URI。我使用了
next,除非
来解决这个问题

现在的问题是,我试图通过从API调用一个特定的方法(称为
identifiers()
)从web中提取特定的数据。现在URI的数据是可用的,但是我正在寻找的特定数据(标识符)是不可用的,并且它会消失

我试着像这样使用
eval{}

eval {
    for $bar ($foo->identifiers()){
        #do something
    };
}
当我使用
eval{}
时,我认为它跳过了错误并向前移动,但我不确定。因为它给出的错误是
响应中的无效内容类型:text/plain


然而,我手动检查了URI,尽管它没有标识符,但它有其余的数据。我希望跳过这个并移动到下一个URI。我该怎么做呢?

好的,我想我理解你的问题,但是多些代码会有所帮助,比如指定哪个Perl API——这似乎与答案无关,但这是你问题的一大部分。话虽如此,问题似乎很简单

与大多数语言一样,当Perl遇到错误时,它会依次在调用上下文中运行,直到找到可以处理错误的位置。Perl最基本的错误处理是
eval{}
(但如果可以的话,我会使用
Try::Tiny
,因为这样可以更清楚地看到,您正在进行错误处理,而不是eval可以做的其他一些奇怪的事情)

无论如何,当Perl点击
eval{}
时,整个
eval{}
退出,并且
$&
被设置为错误。因此,将
eval{}
置于循环之外意味着错误将离开循环。如果将
eval{}
放入循环中,当出现错误时,
eval{}
将退出,但您将继续进行下一次迭代。就这么简单


我还检测到一些迹象,表明您可能没有使用
use strict
使用警告。请这样做,因为它们可以帮助您更快地找到许多bug

谢谢你的回答。我使用的api是Perl api。我用的是严格的;并使用警告;谢谢你的建议。此外,我得到的错误是响应中的无效内容类型:mycode第41行的text/html和代码(我的程序)中的第41行实际上是来自web的数据。我知道代码中没有错误,因为它可以很好地用于以前的URI。现在,我如何修复此错误并继续下一个uri?我的程序遇到了这个错误。好的,Perl不是LWP::UserAgent。它只接受RDF MIME类型,即application/xml或application/RDF+xml。text/html也不是,这就是错误的来源。在本例中,服务器表示内容不是RDF(因为它不是XML)。您可能需要在几乎所有Perl代码中使用Try::Tiny或eval来抵御这种情况。