A bare ``++raise++`` statement, i.e. a ``++raise++`` with no exception provided, will re-raise the last active exception in the current scope. If no exception is active a ``++RuntimeError++`` is raised instead. If the bare "raise" statement is in a ``++finally++`` block, it will only have an active exception to re-raise when an exception from the ``++try++`` block is not caught or when an exception is raised by an ``++except++`` or ``++else++`` block. Thus bare ``++raise++`` statements should not be relied upon in ``++finally++`` blocks. It is simpler to let the exception raise automatically. This rule raises an issue when a bare ``++raise++`` statements is in a ``++finally++`` block. == Noncompliant Code Example ---- def foo(param): result = 0 try: print("foo") except ValueError as e: pass else: if param: raise ValueError() finally: if param: raise # Noncompliant. This will fail in some context. else: result = 1 return result ---- == Compliant Solution ---- def foo(param): result = 0 try: print("foo") except ValueError as e: pass else: if param: raise ValueError() finally: if not param: result = 1 # the exception will raise automatically return result ---- == See * Python Documentation - https://docs.python.org/3/reference/simple_stmts.html#raise[The ``++raise++`` statement]