【问题标题】:How do I check if a Python method is running using a while loop?如何检查 Python 方法是否正在使用 while 循环运行?
【发布时间】:2022-07-06 23:39:42
【问题描述】:

我正在尝试调用一个方法,然后有一个 while 循环,只要该方法正在运行,它就会运行并记录数据。当方法完成运行时,它将停止记录。我最初尝试使用 while True: , for 循环, if False: return data and break。但是在 if False 语句中的 return data and break 出现 code unreachable 错误。我拿出了 if 语句,现在有了这个:

def recordData(memory_service):
    """ Record the data from ALMemory.
        Returns a matrix of values
    """
    print "Recording data ..."
    data = list()

    # while program is running, record data
    print "4"
    kickCall()
    while True:
        print "5"
        line = list()

        for key in ALMEMORY_KEY_NAMES:
            print "6"
            value = memory_service.getData(key)
            line.append(value)
        print "7"
        data.append(line)

        return data
# break

但是,这仅在应该有很多数据时保存了一行数据。 (print# 语句只是检查)

这里是代码输出:Code output

带有 if 语句的代码:

def recordData(memory_service):
    """ Record the data from ALMemory.
        Returns a matrix of values
    """
    print "Recording data ..."
    data = list()

    print "4"
    kickCall()
    while True:
        print "5"
        line = list()
        for key in ALMEMORY_KEY_NAMES:
            print "6"
            value = memory_service.getData(key)
            line.append(value)
        print "7"
        data.append(line)
        
        if False:
            print "8"
            return data
            break
            print "9"
'''

【问题讨论】:

  • 如果我理解正确的话,你只需要把回车移到左边。如果你有一个return,循环将不会被进一步执行。只需确保最终break 循环即可。
  • return data 在 while 循环内。我认为不缩进返回语句 1 级将返回您想要的输出
  • hello @thinkgruen - 当我这样做时,它会将返回语句突出显示为“此代码无法访问”
  • return 将在第一次迭代时跳出循环;您需要某种 conditional 返回,以使所有循环多次执行。 (否则,您根本不需要循环。)简单地取消缩进 return 语句确实使其无法访问,因为现在 nothing 终止循环:条件始终为真,并且没有 @ 987654329@ 声明终止它。
  • 您需要一些方法来确定程序一旦停止运行,然后跳出循环并仅在那时返回。您能否提供有关您正在观看的其他节目的更多信息?

标签: python while-loop


【解决方案1】:

您的第一个 sn-p 似乎有缩进问题。只需将 return data 语句向左移动即可将其从 while 块中删除。除此之外,您似乎并不清楚您正在观察什么条件来结束循环的执行。我推测您希望在没有更多值附加到行列表时立即返回数据。如果是这种情况,那么这可能是一个解决方案:

def recordData(memory_service):
""" Record the data from ALMemory.
    Returns a matrix of values
"""
print "Recording data ..."
data = list()

# while program is running, record data
print "4"
kickCall()

while True:
    print "5"
    line = list()

    for key in ALMEMORY_KEY_NAMES:
        print "6"
        value = memory_service.getData(key)
        line.append(value)
    print "7"

    if len(line) == 0:
        break

    data.append(line)

return data

注意条件语句if len(line) == 0: 也可以重写为if not line:。我选择第一种形式的原因只是为了清楚起见:我们正在评估 line 列表中的元素数量是否为零,而不是名称 line 引用的值评估为真或假。

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2022-01-27
    • 2016-02-13
    • 2020-02-17
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多