Python 结束无限while循环
我目前的代码基本上运行一个无限while循环来收集用户的数据。根据文本文件的内容不断更新词典/列表。供参考:Python 结束无限while循环,python,while-loop,infinite-loop,Python,While Loop,Infinite Loop,我目前的代码基本上运行一个无限while循环来收集用户的数据。根据文本文件的内容不断更新词典/列表。供参考: while (True): IDs2=UpdatePoints(value,IDs2) time.sleep(10) 基本上,我的问题是我不知道什么时候结束,但在while循环运行之后,我希望使用收集的信息,而不是因为程序崩溃而丢失它。有没有一种简单、优雅的方法可以随时退出while循环?像在我的键盘上按某个键这样的操作会很棒。您可以尝试将该代码包装在try/excep
while (True):
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
基本上,我的问题是我不知道什么时候结束,但在while循环运行之后,我希望使用收集的信息,而不是因为程序崩溃而丢失它。有没有一种简单、优雅的方法可以随时退出while循环?像在我的键盘上按某个键这样的操作会很棒。您可以尝试将该代码包装在try/except块中,因为键盘中断只是例外:
try:
while True:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
print('interrupted!')
然后您可以使用CTRL-C退出循环。我认为最简单的解决方案是捕获循环的时间,并使用它来确定何时停止循环
except KeyboardInterrupt:
break
查找此异常的缺点是,它可能会阻止用户在循环仍在运行时终止程序。您可以使用异常。但是你只应该对不应该发生的事情使用例外。所以不是为了这个 这就是我建议发出信号的原因:
import sys, signal
def signal_handler(signal, frame):
print("\nprogram exiting gracefully")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
你应该把它放在程序的开头,当你在程序的任何地方按ctrl+c时,它都会优雅地关闭
代码说明:
您可以导入系统
和信号
。
然后创建一个在退出时执行的函数sys.exit(0)
使用退出代码0(表示一切正常的代码)停止编程
当程序通过ctrl-c或终端中的kill命令获得SIGINT时,程序将正常关闭。我使用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循环无效,允许脚本完成数据保存协议,而不会使整个脚本突然停止
希望这有帮助
我建议使用
try,但如果在Google Colab或Jupyter中的IPYNB文件上运行,则循环中的语法除外,如:
while True:
try:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
break
except:
continue
除
之外的最后一个用于任何其他错误,如果发生,循环将继续您可以捕获Python中的键盘中断
错误:
try:
while 1>0:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
print('While loop ended!')
还有,不要说:
while True:
使用它看起来更专业:
while 1>0:
要了解有关Python错误处理的更多信息(请尝试、例外等),请执行以下操作:
或:
CTRL+BREAK是超级中断键,至少在Windows上是这样。我必须说,这是我见过的try/except块最简洁的用法之一。我可能会尝试此模式进行调试。尝试。。。除了积木不仅仅用于“不应该发生的事情”。事实上,(请求原谅比请求允许更容易)@dopatraman我已经更新了Python 3兼容性的答案。请立即尝试。请注意,根据您使用的IDE,Ctrl+C将不起作用。例如,PyDev不支持它。要测试这一点,请在普通控制台中运行该程序。当try-except没有运行时,这对我有效。不知道为什么,恐怕我没有时间调查。@WillC也许这有帮助:try-except只定义了一种方法,一旦键盘中断成功,它就可以处理键盘中断。但是程序仍然可以阻塞,并且不注册中断信号。这就是信号处理程序有用的地方:当相应的信号到达时,处理程序将直接执行,而不管您的程序是否在某些C代码中阻塞/循环。(例如,昂贵的regex.match调用)