How to implement exception handling during analysis?

I am creating a syntax application that parses ~ 20 sites, ~ 7-15 values ​​from each. The pseudocode is as follows:

ParserA : ParserBase 
{
public override SomeEntity Parse(...)
{
 SomeEntity se = new SomeEntity();

 //some code, parsing value1;
 //some code, parsing value1;
 //some code, parsing value1;

 //some code, parsing value2;
 //some code, parsing value2;
 //some code, parsing value2;

 //some code, parsing value3;
 //some code, parsing value3;
 //some code, parsing value3;

 //some code, parsing value4;
 //some code, parsing value4;
 //some code, parsing value4;

 ...

 return se; 
}
}

ParserB : ParserBase {...} 
ParserC : ParserBase {...} 
...

and etc.

Once parsers have never succeeded with html (layouts happen to change over time), I need to implement exceptionHandling and Logging. I need to parse as much as possible and errors should be logged. I know two ways to handle this:

public override SomeEntity Parse(...)
{
 SomeEntity se = new SomeEntity();

try {
 //some code, parsing value1;
 //some code, parsing value1;
 //some code, parsing value1;

 //some code, parsing value2;
 //some code, parsing value2;
 //some code, parsing value2;

 //some code, parsing value3;
 //some code, parsing value3;
 //some code, parsing value3;

 //some code, parsing value4;
 //some code, parsing value4;
 //some code, parsing value4;

 ...
}
catch (Exception e)
{
 //Log
}
 return se; 
}

Pros: easy to implement

Cons: if I get exc with a value of 5, I have no chance to parse the value of 6.7, .. etc.

2)

ParserA : ParserBase 
{
public override SomeEntity Parse(...)
{
try
{
 //some code, parsing value1;
 //some code, parsing value1;
 //some code, parsing value1;
}
catch(Exception e)
{
 // Log
}

try
{
 //some code, parsing value2;
 //some code, parsing value2;
 //some code, parsing value2;
catch(Exception e)
{
 // Log
}

try
{
 //some code, parsing value3;
 //some code, parsing value3;
 //some code, parsing value3;
catch(Exception e)
{
 // Log
}

try
{
 //some code, parsing value4;
 //some code, parsing value4;
 //some code, parsing value4;
catch(Exception e)
{
 // Log
}

 ...

}
}

Pros: everything that can be disassembled is analyzed;

Cons: too many copies (remember 20 parsers, 7-15 values ​​in each.

, , Safecall, try-catch, ot. , :

SafeCall( () => { 
 //some code, parsing value4;
 //some code, parsing value4;
 //some code, parsing value4;
});

:

try
{
 //some code, parsing value4;
 //some code, parsing value4;
 //some code, parsing value4;
catch(Exception e)
{
 // Log
}

?

+3
2

SafeCall, , , SafeCall, .

+2

, XP "" .

  • UIElement!= null expeceted UI. HTML. ( )

  • , catch try .

  • DOM node (UIElement) .

, Microsoft.

, , , .

, ,

,

+1

Source: https://habr.com/ru/post/1764664/


All Articles