Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which types of exception not to catch?

A lot of times, it is mentioned to only catch exceptions which I can handle (throw, wrap and/or log, or perform some other actions).

Which exceptions cannot be handled? Is this the same meaning as should not be caught? I know that exceptions which may represent an object reference being null should not be caught, because they are programming errors and not user-provoked. Is there any other example? Another one is ExecutionEngineException.

Also, is the course of action in a catch block always just between rethrow, wrap/rethrow and log? Is there ever a case where some other action needs to be performed in a catch block?

Thanks

like image 755
GurdeepS Avatar asked Apr 01 '11 00:04

GurdeepS


2 Answers

The usual advice applies, only catch what you can handle. There's a utility function named IsCriticalException inside the framework that's pretty commonly used by parts of the framework code to decide whether or not to swallow an exception. Might as well go by that. It considers the following critical:

  • NullReferenceException
  • StackOverflowException (uncatchable)
  • OutOfMemoryException
  • ThreadAbortException
  • ExecutionEngineException (uncatchable in 4.0)
  • IndexOutOfRangeException
  • AccessViolationException

It is a good list.

like image 169
Hans Passant Avatar answered Nov 01 '22 21:11

Hans Passant


I would use Eric Lippert's advice and not catch "Fatal" exceptions:

https://ericlippert.com/2008/09/10/vexing-exceptions

like image 20
anon Avatar answered Nov 01 '22 22:11

anon