Ble*_*oul 32 python infinite-loop while-loop
我目前有代码基本上运行无限循环来从用户收集数据.根据文本文件的内容不断更新字典/列表.以供参考:
while (True):
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
基本上,我的问题是我不知道什么时候我希望它结束,但在此循环运行之后我想使用收集的信息,而不是因为崩溃我的程序而丢失它.是否有一种简单,优雅的方式可以随时退出while循环?像按键盘上的某个按键会很棒.
Ste*_*ard 74
您可以尝试将该代码包装在try/except块中,因为键盘中断只是例外:
try:
while True:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
print('interrupted!')
Run Code Online (Sandbox Code Playgroud)
然后你可以用CTRL-C退出循环.
Tri*_*tan 16
你可以使用例外.但是你应该只为不应该发生的事情使用异常.所以不是为了这个.
这就是我推荐信号的原因:
import sys, signal
def signal_handler(signal, frame):
print("\nprogram exiting gracefully")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
Run Code Online (Sandbox Code Playgroud)
你应该把它放在程序的开头,当你在程序的任何地方按ctrl + c时它会正常关闭
代码说明:
你导入sys和signals.然后你创建一个在退出时执行的函数.sys.exit(0)用退出代码0停止编程(代码说,一切都很顺利).
当程序通过ctrl-c或终端中的kill命令获取SIGINT时,程序将正常关闭.
我认为最简单的解决方案是在按下中断键时捕获KeyboardInterrupt,并使用它来确定何时停止循环.
except KeyboardInterrupt:
break
Run Code Online (Sandbox Code Playgroud)
查找此异常的缺点是,它可能会阻止用户在循环仍在运行时终止程序.