簡體   English   中英

結束無限循環

[英]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 時,它會優雅地關閉

代碼說明:

您導入syssignals 然后創建一個在退出時執行的函數。 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/python_try_except.asp

要么:

https://www.w3schools.com/python/gloss_python_try_finally.asp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM