python 函数中的“continue”语句是否可能在“for循环”中被调用?

qc6wkl3g  于 2023-02-07  发布在  Python
关注(0)|答案(3)|浏览(127)

我有一个for循环,如果出现错误,我需要中断它。
我希望在布尔值为真的情况下能够继续for循环,但不想一遍又一遍地写if语句,有没有可能在循环之外调用continue?
下面的代码导致了一个错误.但是我认为这是可行的.

_Range = 6
_RangeEnd = 0

def function_to_call():
    print("x")
    if _Continue is True:
        continue

for x in range(_Range):
    _RangeEnd = _RangeEnd + 1
    function_to_call()
    if _RangeEnd == 5:
        _Continue = True

如果这是不可能的,那么什么是有效的方法呢?我在很多不同的for循环中重用了这个函数。

deyfvvtc

deyfvvtc1#

你不能在循环外调用continue,例如,从循环内调用的函数。
一种选择是从你的函数中 * 返回一个有意义的值 *,告诉调用者continue,即某个真值或假值:

def function_that_decides_to_continue():
    print("x")
    return your_condition_here

for x in range(_Range):
    if function_that_decides_to_continue():
        continue  # skip extra stuff
    # do extra stuff

或者一个哨兵对象:

CONTINUE = object()  # sentinel object, whose sole purpose is to be uniquely identifiable

def function_that_decides_to_continue():
    print("x")
    if your_condition_here:
        return CONTINUE

for x in range(_Range):
    if function_that_decides_to_continue() is CONTINUE:
        continue

错误处理用例中的另一个选项是使用try/except直接处理这些异常:

def function_that_may_fail(divisor):
    return 10 / divisor

for x in [2, 5, 0, 1]:
    try:
        result = function_that_may_fail(x)
    except ZeroDivisionError:
        continue

    do_stuff_with(result)

尽管我承认我可能误解了您实际想要做的事情,因为也许最直接的“如果布尔值为真,希望能够继续for循环”只是一个普通的while

while function_that_decides_to_continue():
    # do stuff

你必须提供你希望“继续的函数”在其中使用的“不同的for循环”的实际例子。

yxyvkwin

yxyvkwin2#

虽然我怀疑这对于程序的流控制是否是一个好主意,但类似这样的东西可以模拟您所需要的:

_Range = 6
_RangeEnd = 0

class Continue(Exception):
    pass

def function_to_call():
    print("x")
    if _Continue is True:
        raise Continue

for x in ...:
    try:
        function_to_call()
        something_else()
    except Continue:
        continue

不,continue不能在循环之外。

m3eecexj

m3eecexj3#

continue需要在一个循环中,我认为最好的解决方案是将一个(if boolVar == True:继续)。

相关问题