跳到内容

raise-within-try (TRY301)

源自 tryceratops linter。

作用

检查 try 代码块中是否存在 raise 语句。 仅捕获那些抛出 try 语句本身捕获的异常的 raise 语句。

为什么这不好?

在同一个 try 代码块中引发和捕获异常是多余的,因为可以重构代码以完全避免 try 代码块。

或者,可以将 raise 移动到内部函数中,使异常可以在多个调用站点中重用。

示例

def bar():
    pass


def foo():
    try:
        a = bar()
        if not a:
            raise ValueError
    except ValueError:
        raise

建议改为

def bar():
    raise ValueError


def foo():
    try:
        a = bar()  # refactored `bar` to raise `ValueError`
    except ValueError:
        raise