Как заставить try / catch продолжать работать после ошибки? - PullRequest
0 голосов
/ 06 января 2019

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

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 программа продолжала работать и начала выполнять строку «position»?

Ответы [ 6 ]

0 голосов
/ 06 января 2019

Как насчет использования блока 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", "");
}
0 голосов
/ 06 января 2019

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

0 голосов
/ 06 января 2019

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

0 голосов
/ 06 января 2019

Вы можете просто сузить блок 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", "");
0 голосов
/ 06 января 2019

Единственный способ сделать это - разделить строки на отдельные 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 - ");    
}
…
0 голосов
/ 06 января 2019

Одним из способов является добавление try catch в ваш 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", "");

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

...