0

我有一个很长的代码,它需要永远运行。我想知道即使我使用键盘中断代码运行,是否有办法保存结果?我发现的所有示例都使用除了 Keyboardinterrupt,所以我不知道这是否是正确的代码。

更具体地说:我有一个代码,它以将结果保存在列表中并返回列表结束。在这种情况下,尽管键盘中断,有没有办法返回列表?我可以使用if keyboardinterrupt声明吗?

我的代码:

# removed is a very long list

for a, b in itertools.combinations(removed, 2):
        temp = [a,b]
        Token_Set_Ratio = fuzz.token_set_ratio(temp[0],temp[1])
        if Token_Set_Ratio > k:
            c = random.choice(temp)
            if c in removed:
                removed.remove(c)
            else:
                pass
        else:
            pass
    return removed

即使发生键盘中断,我在哪里可以添加 python 保留删除的部分?

4

1 回答 1

1

您可以使用try- exceptwith KeyboardInterrupt

def your_function():
    removed = [...]

    try:
        # Code that takes long time
        for a, b in itertools.combinations(removed, 2):
            ...
        return removed
    except KeyboardInterrupt:
        return removed

一个小例子:

import time

def foo():
    result = []
    try:
        # Long running code
        for i in range(10000):
            result.append(i)
            time.sleep(0.1)
        return result
    except KeyboardInterrupt:
        # Code to "save"
        return result

print(foo())

当您在执行结束前按 Ctrl-C 时,将打印部分列表。

于 2019-08-11T06:11:52.927 回答