All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.py.rules.python.S5709.html Maven / Gradle / Ivy

There is a newer version: 4.23.0.17664
Show newest version

This rule raises an issue when a class derives from one of the following exception classes: BaseException, KeyboardInterrupt, SystemExit or GeneratorExit.

Why is this an issue?

SystemExit is raised when sys.exit() is called. KeyboardInterrupt is raised when the user asks the program to stop by pressing interrupt keys. Both exceptions are expected to propagate up until the application stops.

In order to avoid catching SystemExit and KeyboardInterrupt by mistake, PEP-352 created the root class BaseException from which SystemExit, KeyboardInterrupt and Exception derive. Thus developers can use except Exception: without preventing the software from stopping.

The GeneratorExit class also derives from BaseException as it is not really an error and is not supposed to be caught by user code.

As said in Python’s documentation, user-defined exceptions are not supposed to inherit directly from BaseException. They should instead inherit from Exception or one of its subclasses.

Code examples

Noncompliant code example

class MyException(BaseException):  # Noncompliant
    pass

Compliant solution

class MyException(Exception):
    pass

Resources

Documentation





© 2015 - 2024 Weber Informatics LLC | Privacy Policy