[英]Ending an infinite while loop
我目前的代碼基本上運行一個無限的 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 - C鍵盤中斷函數將異常切換到 try 循環,這使 while 循環無效,允許腳本完成數據保存協議而不會使整個腳本突然停止。
希望這可以幫助!
如果您在 Google Colab 或 Jupyter 中的 IPYNB 文件上運行,我建議使用try, except
循環中的語法,例如:
while True:
try:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
break
except:
continue
最后一個except
是任何其他錯誤,如果發生循環將恢復
您可以在 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/gloss_python_try_finally.asp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.