== Why is this an issue? In Python 3, attempting to catch in an ``++except++`` statement an object which does not derive from BaseException will raise a ``++TypeError++``. In Python 2 it is possible to raise old-style classes but this shouldn't be done anymore in order to be compatible with Python 3. In order to catch multiple exceptions in an ``++except++`` statement, a tuple of exception classes should be provided. If you are about to create a custom Exception class, note that custom exceptions should inherit from ``++Exception++``, not ``++BaseException++``. ``++Exception++`` allows people to catch all exceptions except the ones explicitly asking the interpreter to stop, such as ``++KeyboardInterrupt++`` and https://docs.python.org/3/library/exceptions.html#GeneratorExit[``++GeneratorExit++``] which is not an error. See https://www.python.org/dev/peps/pep-0352/#exception-hierarchy-changes[PEP 352] for more information. This rule raises an issue when the expression used in an ``++except++`` statement is not a class deriving from ``++BaseException++`` nor a tuple of such classes. === Noncompliant code example [source,python] ---- class CustomException: """An Invalid exception class.""" try: "a string" * 42 except CustomException: # Noncompliant print("exception") except (None, list()): # Noncompliant * 2 print("exception") try: "a string" * 42 except [TypeError, ValueError]: # Noncompliant. Lists are not accepted. print("exception") except {TypeError, ValueError}: # Noncompliant. Sets are not accepted. print("exception") ---- === Compliant solution [source,python] ---- class MyError(Exception): pass try: "a string" * 42 except (MyError, TypeError): print("exception") ---- == Resources * Python documentation - https://docs.python.org/3/tutorial/errors.html[Errors and Exceptions] * Python documentation - https://docs.python.org/3/reference/compound_stmts.html#except[the ``++try++`` statement] * https://www.python.org/dev/peps/pep-0352/#exception-hierarchy-changes[PEP 352 - Required Superclass for Exceptions] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Change this expression to be a class deriving from BaseException or a tuple of such classes. === Highlighting The expression which does not resolve in a valid exception class or a tuple of such classes. ''' == Comments And Links (visible only on this page) include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]