Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Do not catch general exception types
Collapse the table of content
Expand the table of content

Do not catch general exception types

TypeName

DoNotCatchGeneralExceptionTypes

CheckId

CA1031

Category

Microsoft.Design

Breaking Change

NonBreaking

System.Exception or System.SystemException is caught in a catch statement, or a general catch clause is used.

General exceptions should not be caught.

To fix a violation of this rule, catch a more specific exception, or re-throw the general exception as the last statement in the catch block.

Do not exclude a warning from this rule. Catching general exception types can hide run-time problems from the library user, and can complicate debugging.

The following example shows a type that violates this rule and a type that correctly implements the catch block.

using System;
using System.IO;

namespace DesignLibrary
{
    // Creates two violations of the rule.
    public class GenericExceptionsCaught
    {
        FileStream inStream;
        FileStream outStream;

        public GenericExceptionsCaught(string inFile, string outFile)
        {
            try
            {
                inStream = File.Open(inFile, FileMode.Open);
            }
            catch(SystemException e)
            {
                Console.WriteLine("Unable to open {0}.", inFile);
            }

            try
            {
                outStream = File.Open(outFile, FileMode.Open);
            }
            catch
            {
                Console.WriteLine("Unable to open {0}.", outFile);
            }
        }
    }

    public class GenericExceptionsCaughtFixed
    {
        FileStream inStream;
        FileStream outStream;

        public GenericExceptionsCaughtFixed(string inFile, string outFile)
        {
            try
            {
                inStream = File.Open(inFile, FileMode.Open);
            }

            // Fix the first violation by catching a specific exception.
            catch(FileNotFoundException e)
            {
                Console.WriteLine("Unable to open {0}.", inFile);
            }

            try
            {
                outStream = File.Open(outFile, FileMode.Open);
            }

            // Fix the second violation by re-throwing the generic 
            // exception at the end of the catch block.
            catch
            {
                Console.WriteLine("Unable to open {0}.", outFile);
                throw;
            }
        }
    }
}

Community Additions

ADD
Show:
© 2015 Microsoft