2011-03-28

Exception Types

A while ago, Eric Lippert wrote an excellent blog entry called Vexing Exceptions. He defines four categories of exceptions, along with recommendations of how to handle them. I summarized this information into a Word document which I've printed out and posted at my desk:

Download - View Online in Microsoft Office Live - View Online in Google Docs Viewer

I've also started to use Mr. Lippert's terminology in my regular work, and I see it becoming more common in the programming communities. A brief summary of the terminology is below:

  • Fatal - exceptions that you can't prevent and cannot handle in a reasonable manner, e.g., out of memory, thread aborted.
  • Boneheaded - exceptions that are bugs in the code, e.g., argument null, index out of range.
  • Vexing - exceptions thrown in non-exceptional situations, e.g., parsing errors.
  • Exogenous - exceptions due to external influences, e.g., file not found.

The question of what exactly constitutes a "non-exceptional situation" is not addressed; this is an age-old debate.

Eric Lippert's post is mainly concerned with client-side code; that is, how to handle the different exception categories. When I write code, I always strive to write it as if it were going to be a library (I find that a little thought about API design goes a long way towards code reusability, even if the code never becomes an actual library). Therefore, in my Word document, I added design recommendations for each exception category as well.

3 comments:

  1. I would have loved to look at the document, but the URL is not working for me. Could you fix that somehow? Thanks!

    ReplyDelete
  2. @Anonymous:

    The document is hosted on Windows Live, and I've seen it come and go several times myself. I'll copy it to another host when I get the chance.

    ReplyDelete
  3. The document has been moved to a more reliable host.

    ReplyDelete