適当にやるとターミナルを落とすしかなくなる
まずはこのコード
1 2 3 4 5 |
import time for i in range(10): print(i) time.sleep(1) |
をエラーがあっても続けるようにします(KeyboardInterruptで止まりづらい例)
1 2 3 4 5 6 7 8 |
import time for i in range(10): try: print(i) time.sleep(1) except: pass |
この書き方だとCtrl+Cで強制終了させようとしても、sleep分を飛ばすだけで残りの回数分Ctrl+Cを押す必要があります
仮に、range[10]と指定せずwhile True等無限ループを指定していた場合は停止させられません
繰り返し処理を実行中に[KeyboardInterrupt]という例外が発生して、except処理をしていないとエラーで停止するのですが、
上記の書き方だと繰り返し一つ一つに対してpassが発生するのでループ自体を抜けられません
抜けられる書き方1
1 2 3 4 5 6 7 8 9 10 11 |
import time def main(): for i in range(10): print(i) time.sleep(1) try: main() except: pass |
この書き方だと1度のCtrl+Cで抜けられる
forの時にはforの一つ一つに対してCtrl+Cが効いていたようですが
こっちはあくまでmain()自体を飛ばすようになります
抜けられる書き方2
1 2 3 4 5 6 7 8 |
import time for i in range(10): try: print(i) time.sleep(1) except: break |
ループ処理を抜けたいので抜ける命令[break]を書きます
おまけ Ctrl+C(KeyboardInterrupt)をキャッチする
except: → except KeyboardInterrupt:
自分の意志で停止した時に理由表示をわかりやすく出したい
1 2 3 4 5 6 7 8 9 |
import time for i in range(10): try: print(i) time.sleep(1) except KeyboardInterrupt: print("Ctrl+Cで停止しました") break |
通常のエラーを無視するが、キーボード入力での停止は受け付ける
1 2 3 4 5 6 7 8 9 10 11 |
import time for i in range(10): try: print(i) time.sleep(1) except KeyboardInterrupt: print("Ctrl+Cで停止しました") break except: pass |
以上です
コメント
[…] ・Ctrl+Cで止められるようにする方法についてPythonでループ処理中にキーボード入力(Ctrl+C)で抜けられるようにする(jibundex) […]