Как заставить try / catch работать после ошибки?

Код парсера доступен

try
{
   id_source = await ParsingAll(0, "#adv_id", "");   
   foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
   position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
catch (Exception ex)
{
    Error?.Invoke(id_source + "- Error - ");    
}   

Как сделать, если в строке «foto_path» возникла ошибка, то после обработки ошибки try / catch программа продолжила работу и начала выполнять строку «позиция»?

Решение зависит от того, можно ли, зная ваши требования к архитектуре, добавить try catch внутри метода ParsingAll. Если да, то это простое и эффективное решение.

Fabjan 06.01.2019 10:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
66
6

Ответы 6

Один из способов - добавить trycatch в ваш метод ParseAll:

ParsingAll()
{
   try
   {

   }
   catch(Exception e)
   {
   }
}

и вы можете вызвать им как обычно:

id_source = await ParsingAll(0, "#adv_id", "");   
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");

и вернуть некоторый статус с результатом, чтобы сказать, было ли оно успешным или нет.

Или вам нужно будет обернуть его отдельно каждого из них, чтобы следующие операторы выполнялись в случае сбоя одного из них:

try
{
    foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
}
catch(Exception e)
{
}

position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");

Но все зависит от требований программы, как пойдет поток.

Единственный способ сделать это - разбить строки на отдельные предложения try...catch:

try
{
   id_source = await ParsingAll(0, "#adv_id", "");   
catch (Exception ex)
{
    Error?.Invoke(id_source + "- Error - ");    
}
try
{
   foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src"); 
catch (Exception ex)
{
    Error?.Invoke(id_source + "- Error - ");    
}
…

Вы можете просто сузить блок try-catch:

Код парсера доступен

// May need its own try-catch blcok
id_source = await ParsingAll(0, "#adv_id", "");

try
{   
    foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
catch (Exception ex)
{
    Error?.Invoke(id_source + "- Error - ");    
}

// May need its own try-catch blcok
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");

Получить значение foto_path из подпрограммы, чем попытаться поймать Или поместите try catch в процедуру ParsingAll.

Вы можете подумать о том, чтобы перехватить ошибку в методе async ParsingAll и вернуть только действительные выходные данные этого метода.

Как насчет использования блока finally, который всегда будет выполняться независимо от возникновения исключения. Я считаю, что это скорее обходной путь, но лучшим решением должно быть решение в методе ParsingAll () для вашей ситуации.

try
{
   id_source = await ParsingAll(0, "#adv_id", "");   
   foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
}
catch (Exception ex)
{
    Error?.Invoke(id_source + "- Error - ");    
}
finally
{
    position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
}

Другие вопросы по теме