Skip to content

raw-string-in-exception (EM101)#

Derived from the flake8-errmsg linter.

Fix is sometimes available.

What it does#

Checks for the use of string literals in exception constructors.

Why is this bad?#

Python includes the raise in the default traceback (and formatters like Rich and IPython do too).

By using a string literal, the error message will be duplicated in the traceback, which can make the traceback less readable.

Example#

Given:

raise RuntimeError("'Some value' is incorrect")

Python will produce a traceback like:

Traceback (most recent call last):
  File "tmp.py", line 2, in <module>
    raise RuntimeError("Some value is incorrect")
RuntimeError: 'Some value' is incorrect

Instead, assign the string to a variable:

msg = "'Some value' is incorrect"
raise RuntimeError(msg)

Which will produce a traceback like:

Traceback (most recent call last):
  File "tmp.py", line 3, in <module>
    raise RuntimeError(msg)
RuntimeError: 'Some value' is incorrect