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