jump-statement-in-finally (B012)#
Derived from the flake8-bugbear linter.
What it does#
Checks for break, continue, and return statements in finally
blocks.
Why is this bad?#
The use of break, continue, and return statements in finally blocks
can cause exceptions to be silenced.
finally blocks execute regardless of whether an exception is raised. If a
break, continue, or return statement is reached in a finally block,
any exception raised in the try or except blocks will be silenced.
Example#
def speed(distance, time):
try:
return distance / time
except ZeroDivisionError:
raise ValueError("Time cannot be zero")
finally:
return 299792458 # `ValueError` is silenced
Use instead:
def speed(distance, time):
try:
return distance / time
except ZeroDivisionError:
raise ValueError("Time cannot be zero")