我目前有代碼,基本上運行無限while循環來收集用戶的數據。不斷更新基於文本文件內容的字典/列表。供參考:結束無限while循環
while (True):
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
基本上,我的問題是,我不知道什麼時候我想這是結束,但是這個while循環後運行我想用收集到的信息,而不是崩潰我的程序失去它。有沒有簡單,優雅的方式,只要我想要退出while循環?像按下我的鍵盤上的某個鍵會很棒。
我目前有代碼,基本上運行無限while循環來收集用戶的數據。不斷更新基於文本文件內容的字典/列表。供參考:結束無限while循環
while (True):
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
基本上,我的問題是,我不知道什麼時候我想這是結束,但是這個while循環後運行我想用收集到的信息,而不是崩潰我的程序失去它。有沒有簡單,優雅的方式,只要我想要退出while循環?像按下我的鍵盤上的某個鍵會很棒。
你可以試試/包裝的代碼在try塊除外,因爲鍵盤中斷只是例外:
try:
while True:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
print('interrupted!')
然後,你可以退出與CTRL-C循環。
我認爲最簡單的解決方案是在的時候趕上KeyboardInterrupt,並用它來確定何時停止循環。
except KeyboardInterrupt:
break
查找此異常的缺點是,它可能會阻止用戶在循環仍在運行時終止程序。
CTRL + BREAK是超級中斷鍵,至少在Windows上。 –
您可以使用例外。但你只應該使用例外情況來處理那些不應該發生的事情。所以不是爲了這個。
這就是爲什麼我推薦信號:
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時,程序將優雅地關閉。
夥計們,你們真棒。這工作。 – Blessoul
我不得不說,這是我見過的一個嘗試/除了塊以外的更好用途之一。我可能會嘗試這種模式進行調試。 – reem
這不適用於Python 3.5 – dopatraman