Uploaded image for project: 'Rules Repository'
  1. Rules Repository
  2. RSPEC-2221

"Exception" should not be caught when not required by called methods

    XMLWordPrintable

    Details

    • Type: Code Smell Detection
    • Status: Active
    • Resolution: Unresolved
    • Message:
      Catch a list of specific exception subtypes instead.
    • Default Severity:
      Minor
    • Impact:
      Low
    • Likelihood:
      Low
    • Legacy Key:
      WhenOthersAsOnlyExceptionHandlerCheck
    • Covered Languages:
      C#, Java, PL/SQL
    • Remediation Function:
      Constant/Issue
    • Constant Cost:
      15min
    • Analysis Scope:
      Main Sources
    • CWE:
      CWE-396
    • Checkstyle:
      IllegalCatch
    • FindBugs:
      REC_CATCH_EXCEPTION
    • FxCop:
      DoNotCatchGeneralExceptionTypes, CA1031
    • PMD:
      AvoidCatchingGenericException

      Description

      Catching Exception seems like an efficient way to handle multiple possible exceptions. Unfortunately, it traps all exception types, both checked and runtime exceptions, thereby casting too broad a net. Indeed, was it really the intention of developers to also catch runtime exceptions? To prevent any misunderstanding, if both checked and runtime exceptions are really expected to be caught, they should be explicitly listed in the catch clause.

      This rule raises an issue if Exception is caught when it is not explicitly thrown by a method in the try block.

      Noncompliant Code Example

      try {
        // do something that might throw an UnsupportedDataTypeException or UnsupportedEncodingException
      } catch (Exception e) { // Noncompliant
        // log exception ...
      }
      

      Compliant Solution

      try {
        // do something
      } catch (UnsupportedEncodingException|UnsupportedDataTypeException|RuntimeException e) {
        // log exception ...
      }
      

      or if runtime exceptions should not be caught:

      try {
        // do something
      } catch (UnsupportedEncodingException|UnsupportedDataTypeException e) {
        // log exception ...
      }
      

      See

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              ann.campbell.2 Ann Campbell
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated: