如何在Python中防止函数在return语句后继续执行

0 投票
3 回答
4778 浏览
提问于 2025-04-29 19:37

我正在尝试创建一个函数,用来检查一个值是否有效。这个函数会放在另一个函数里,用来判断后面的代码是否继续执行。我的想法大致是这样的:

def test(value):
    if value == 5:
        return "Don't Continue"

def go(number):
    test(number)
    print('Here')
    return 'Yes'
    print('Now here')

go(5) # Returns "Don't Continue", 'Here'

为什么当test函数返回一个值时,这个函数没有停止执行呢?有没有办法在不使用多行的if和else的情况下,创建这种类型的检查?

相关文章:

  • 暂无相关问题
暂无标签

3 个回答

0

return 的意思是从当前的函数返回。所以如果你调用另一个返回值的方法,并不会让调用它的方法也返回。

你可以在 test 方法里抛出一个异常。这样就会停止执行。

或者你可以把 go 改成这样:

if test(number):
    return

这样的话,它会根据调用 test 的结果来决定是否继续执行这个方法。

1

如果你的程序可能有很多不同的路径,而你又想避免写很多个if语句,这里有一个方法可以尝试:

def test(value):
    return value == 5


def passed():
    return 'Passed'


def failed():
    return 'Failed'


def router(value):
    routes = {
        True: passed,
        False: failed,
    }
    result = test(value)
    return routes[result]


def main(value):
    route = router(value)
    return route()


if __name__ == '__main__':
    print(main(5))
    print(main(4))
4

为什么当测试函数返回一个值时,函数不停止执行呢?

因为返回语句只对它所在的函数有效,而不影响调用这个函数的其他函数。

你想要的效果大概是这样的:

def test(value):
    if value == 5:
        return False
    return True
    # these 3 lines can be shortened to: return value == 5

def go(number):
    if test(number): # test(value) returned True
        print('Test succeeded')
        return
    print('Test failed')

go(5) # will print 'Test failed'

有没有办法在不使用多行if和else的情况下创建这种类型的测试?

如果你是想检查多个值,可以这样做:

def test(value):
    # will return False if value is either 3 5 or 7
    if value in [3, 5, 7]:
        return False
    return True

不过逻辑有点问题。更好的做法是,如果测试通过就返回True,如果没有通过就返回False。

撰写回答