Python 如何在执行过程中停止for循环

Python 如何在执行过程中停止for循环,python,python-idle,Python,Python Idle,我目前正在运行一个程序,我希望它能持续一两个小时。我现在需要打破循环,这样程序的其余部分才能继续 这是代码的一部分: from nltk.corpus import brown from nltk import word_tokenize, sent_tokenize from operator import itemgetter sentences = [] try: for i in range(0,55000): try: sentence

我目前正在运行一个程序,我希望它能持续一两个小时。我现在需要打破循环,这样程序的其余部分才能继续

这是代码的一部分:

from nltk.corpus import brown
from nltk import word_tokenize, sent_tokenize
from operator import itemgetter

sentences = []
try:
    for i in range(0,55000):
        try:
            sentences.append(brown.sents()[i])
            print i
        except:
            break
except:
    pass 

目前该环路约为30000个。我想退出并继续代码(此处未显示)。请建议我如何这样做,程序不会完全中断退出。(与键盘中断不同)

我认为您也可以将for循环放在try块中,通过继续程序的其余部分来捕获键盘中断异常。使用这种方法,您应该能够通过在程序内部按ctrl+C来打破循环。代码看起来与此类似:

try:

    # your for loop

except KeyboardInterrupt:

    print "interrupted"

# rest of your program

可以在执行break命令之前使用pickle保存数据。下次加载数据并继续循环。

因为它已经在运行,所以不能修改代码。除非在
pdb
下调用它,否则无法进入Python调试器来更改条件以离开循环并继续程序的其余部分。所以没有一条正常的途径对你开放

有一个外部解决方案,需要熟悉Python解释器和运行时。您可以将
gdb
调试器附加到Python进程(如果您在Windows上,也可以附加VisualStudio)。然后,当您进入时,检查主线程的堆栈跟踪。您将看到一系列嵌套的
PyEval.*
调用等等。如果您能找出循环在堆栈跟踪中的位置,那么就识别循环。然后您需要找到计数器变量(一个包裹在
PyObject
中的整数),并将其设置为足够大的值以触发循环结束,然后让流程继续。不适合胆小的人!这里有更多信息:

实际上,您只需要决定是让它独自完成,还是杀死它并重新启动

可能最简单的方法是简单地终止进程,修改代码,使循环可以通过
KeyboardInterrupt
异常中断(正如@fedormirnov所建议的),然后重新开始。你将失去你已经投入的处理时间,但认为这是一个沉没的成本。 关于如何向程序添加支持以调试正在运行的进程,这里有很多有用的信息:


在控制台和后台模式下运行此程序?它已在控制台中运行,无法停止程序。我可以更改模式吗?*nix版本:
nohup python script.py>output.txt&
,但程序已经运行了一半。我现在无法在空闲状态下键入命令。我怎么能只打破循环呢。这就是我所需要的。