Я пытаюсь извлечь данные с веб-сайта, используя Perl API. Я использую список URI для получения данных с веб-сайта.
Первоначально проблема заключалась в том, что если бы не было данных, доступных для URI, он умрет, и я хотел, чтобы он пропустил этот конкретный URI и перешел к следующему доступному URI. Я использовал next unless ....;
, чтобы решить эту проблему.
Теперь проблема в том, что я пытаюсь извлечь конкретные данные из Интернета, вызывая определенный метод (называемый идентификаторами ()) из API. Теперь данные доступны для URI, но конкретные данные (идентификаторы), которые я ищу, недоступны, и они умирают.
Я пытался использовать eval {} вот так
eval {
for $bar ($foo->identifiers()){
#do something
};
}
Когда я использую eval {}, я думаю, что он пропускает ошибку и движется вперед, но я не уверен. Потому что это ошибка «Недопустимый тип содержимого в ответе: текст / обычный».
Принимая во внимание, что я проверил URI вручную, хотя у него нет идентификаторов, у него есть остальные данные. Я хочу, чтобы это пропустить и перейти к следующему URI. Как я могу это сделать?
Я получил ответ от одного из экспертов, который:
Когда Perl обнаруживает ошибку, как и большинство языков, он проходит через контексты вызова по порядку, пока не найдет место, где он сможет обработать ошибку. Самая базовая обработка ошибок в Perl - это eval {} (но я бы использовал Try :: Tiny, если вы можете, так как теперь становится понятнее, что вы делаете обработку ошибок вместо некоторых других странных вещей, которые может сделать eval).
В любом случае, когда Perl нажимает eval {}, весь eval {} завершается, и $ & устанавливается на ошибку. Таким образом, наличие eval {} вне цикла означает, что ошибки покинут цикл. Если вы поместите eval {} в цикл, при возникновении ошибки eval {} завершится, но вы перейдете к следующей итерации. Это так просто.
Но на самом деле ошибка, которую я получаю, - это недопустимый тип содержимого в ответе: text / html в строке 41 моего кода и строка 41 в моем коде (моей программе) действительно относится к данным из Интернета. Я знаю, что в коде нет ошибок, потому что он хорошо работает для предыдущих Uris. Теперь, как мне исправить эту ошибку и перейти к следующему URI? моя программа застревает на этой ошибке.