结束while循环无限

问题描述 投票:25回答:4

我目前有基本上运行一个无限循环的同时,从用户那里收集数据的代码。不断更新的基于文本文件的内容词典/名单。以供参考:

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

基本上,我的问题是,我不知道什么时候我想这是结束,但是这个while循环后运行我想用收集到的信息,而不是崩溃我的程序失去它。有一个简单,优雅的方式来简单地退出while循环的进行,每当我想要的吗?类似按下我的键盘上的某个键的东西将是真棒。

python while-loop infinite-loop
4个回答
69
投票

你可以试试/包装的代码在try块除外,因为键盘中断是公正的例外情况:

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

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


15
投票

你可以使用异常。但是,你应该只使用例外是不应该发生的东西。所以,不是这个。

这就是为什么我建议的信号:

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(即表示该代码,一切都很好)编程。

当程序得到SIGINT或者通过CTRL-C或在终端kill命令你正常程序将关闭。


4
投票

我认为,最简单的解决办法是捕捉KeyboardInterruptinterrupt key is pressed时,并用它来确定何时停止循环。

except KeyboardInterrupt:
    break

寻找这个异常的缺点是,它可以防止用户终止程序,而循环仍在运行。


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键盘中断功能切换的例外试循环,勾销while循环,使脚本来完成数据节能协议,而不使整个脚本突然停止。

希望这可以帮助!

Resultant

© www.soinside.com 2019 - 2024. All rights reserved.