我目前的代码基本上运行一个无限的while循环来收集用户的数据。根据文本文件的内容不断更新字典/列表。以供参考:
while (True):
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
基本上,我的问题是我不知道什么时候结束,但是在这个 while 循环运行之后,我想使用收集到的信息,而不是因为我的程序崩溃而丢失它。有没有一种简单、优雅的方法可以随时退出 while 循环?像按我键盘上的某个键这样的东西会很棒。
我目前的代码基本上运行一个无限的while循环来收集用户的数据。根据文本文件的内容不断更新字典/列表。以供参考:
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 退出循环。
你可以使用例外。但是你应该只对不应该发生的事情使用例外。所以不是为了这个。
这就是为什么我推荐信号:
import sys, signal
def signal_handler(signal, frame):
print("\nprogram exiting gracefully")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
你应该把它放在程序的开头,当你在程序的任何地方按 ctrl+c 时,它都会优雅地关闭
代码说明:
您导入sys
和signals
. 然后你创建一个在退出时执行的函数。sys.exit(0)
使用退出代码 0 停止编程(代码表示一切正常)。
当程序通过 ctrl-c 或终端中的 kill 命令获取 SIGINT 时,您的程序将正常关闭。
我认为最简单的解决方案是在按下中断键时捕获KeyboardInterrupt,并使用它来确定何时停止循环。
except KeyboardInterrupt:
break
查找此异常的缺点是它可能会阻止用户在循环仍在运行时终止程序。
我使用 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-keyboard Cinterrupt 函数将异常切换到 try 循环,这会使 while 循环无效,从而允许脚本完成数据保存协议没有使整个脚本突然停止。
希望这可以帮助!
try, except
如果您在 Google Colab 或 Jupyter 中的 IPYNB 文件上运行,我建议在循环中使用该语法,例如:
while True:
try:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
break
except:
continue
最后一个except
是针对任何其他错误,如果发生循环将恢复
KeyboardInterrupt
您可以在 Python中捕获错误:
try:
while 1>0:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
print('While loop ended!')
另外,不要说:
while True:
使用起来看起来更专业:
while 1>0:
阅读更多关于 Python 错误处理(try、except 等)的信息:
或者:
https://www.w3schools.com/python/gloss_python_try_finally.asp