In general, you probably want to catch exceptions at the lowest possible level in your code. The closer they're handed relative to where the exception occurs, the better chance that you have to fix the problem that caused them.
If you can't take any corrective action at this level that has a hope of fixing the problem causing the exception, you should not be handling it at all. Just let the exception bubble up, and handle it globally like you want.
That being said, if you've have handled the exception at a lower level, the only way you're going to be able to catch it at a higher level is if you rethrow it from the Catch
block at the lower level.
So, for example:
try
{
//your code
}
catch (SomeException e)
{
//take any relevant handling measures
//rethrow the exception
throw;
}
Of course, this would technically mean that the exception is unhandled by this Try/Catch block at the lower level, but that's the only way you're going to have anything to catch at a higher level.
For more information on rethrowing exceptions, see: