结束无限循环

时间:2013-09-25 01:51:20

标签: python while-loop infinite-loop

我目前的代码基本上运行一个无限的while循环来收集用户的数据。根据文本文件的内容不断更新字典/列表。供参考:

while (True):
    IDs2=UpdatePoints(value,IDs2)
    time.sleep(10)

基本上,我的问题是我不知道什么时候我希望这个结束,但是在这个循环运行之后我想要使用收集的信息,而不是因为崩溃我的程序而丢失它。是否有一种简单,优雅的方式可以随时退出while循环?像按键盘上的某个按键会很棒。

6 个答案:

答案 0 :(得分:65)

您可以尝试在try / except块中包装该代码,因为键盘中断只是例外:

try:
    while True:
        IDs2=UpdatePoints(value,IDs2)
        time.sleep(10)
except KeyboardInterrupt:
    print('interrupted!')

然后你可以用CTRL-C退出循环。

答案 1 :(得分:13)

您可以使用例外。但是你应该只为不应该发生的事情使用异常。所以不是为了这个。

这就是我推荐信号的原因:

import sys, signal
def signal_handler(signal, frame):
    print("\nprogram exiting gracefully")
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

你应该把它放在程序的开头,当你在程序中的任何地方按ctrl + c它会正常关闭

代码说明:

您导入syssignals。 然后你创建一个在退出时执行的函数。 sys.exit(0)使用退出代码0停止编程(代码表示一切顺利)。

当程序通过ctrl-c或终端中的kill命令获取SIGINT时,程序将正常关闭。

答案 2 :(得分:4)

我认为最简单的解决方案是在KeyboardInterrupt时捕获interrupt key is pressed,并使用它来确定何时停止循环。

except KeyboardInterrupt:
    break

查找此异常的缺点是,它可能会阻止用户在循环仍在运行时终止程序。

答案 3 :(得分:1)

我使用python跟踪股票价格并在我的投资组合中提交自动的买/卖命令。长话短说,我希望我的跟踪程序可以对数据服务器执行ping操作以获取信息,并根据所收集的信息进行交易,但是我还想保存库存数据以供将来参考,此外还可以启动/停止程序每当我想要的时候。

最终为我工作的是以下内容:

trigger = True
while trigger == True:
 try:
  (tracking program and purchasing program conditions here)
 except:
  trigger = False

print('shutdown initialized')
df = pd.DataFrame...
save all the datas
print('shutdown complete')

从此处开始,当程序处于永久循环中时,通过经纪人的API散布对数据的请求,使用 CTRL - C 键盘中断功能将异常切换为try循环使while循环无效,从而使脚本可以完成数据保存协议,而不会导致整个脚本突然停止。

希望这会有所帮助!

Resultant

答案 4 :(得分:0)

如果您正在Google Colab或Jupyter中的IPYNB文件上运行,我建议在循环中使用try, except语法,例如:

while True:
    try:
       IDs2=UpdatePoints(value,IDs2)
       time.sleep(10)
    except KeyboardInterrupt:
       break
    except:
       continue

最后一个except是任何其他错误(如果发生),循环将恢复

答案 5 :(得分:-3)

您可以在 Python 中捕获 KeyboardInterrupt 错误:

try:
    while 1>0:
        IDs2=UpdatePoints(value,IDs2)
        time.sleep(10)
except KeyboardInterrupt:
    print('While loop ended!')

另外,不要说:

while True:

看起来更专业:

while 1>0:

要阅读有关 Python 错误处理(尝试、除外等)的更多信息:

<块引用>

https://www.w3schools.com/python/python_try_except.asp

或:

<块引用>

https://www.w3schools.com/python/gloss_python_try_finally.asp