Pythonでは、Ctrl+C
を押すことでKeyboardInterrupt
が送られ、プログラムが終了します。しかし、この動作は例外処理によって変更されることがあります。例えば、以下のようなコードではKeyboardInterrupt
が捕捉され、プログラムは終了しません。
try:
# 何らかの処理
except KeyboardInterrupt:
# 何らかの処理
この場合、raise
を使って例外を再度発生させることで、Ctrl+C
を押してもプログラムを終了させることができます。
try:
# 何らかの処理
except KeyboardInterrupt:
# 何らかの処理
raise
また、except:
ブロック(何も指定しないexcept
)やexcept BaseException:
ブロックもKeyboardInterrupt
を捕捉します。これらのブロックを使用すると、KeyboardInterrupt
が捕捉され、例外の連鎖が切れてしまう可能性があります。
これらの問題を避けるためには、except
ブロックで捕捉する例外を具体的に指定することが推奨されます。
さらに、signal
モジュールを使用して、Ctrl+C
のシグナルを直接処理することも可能です。
import signal
def handler(signum, frame):
# 何らかの処理
sys.exit(0)
signal.signal(signal.SIGINT, handler)
このコードでは、Ctrl+C
が押されるとhandler
関数が呼び出され、sys.exit(0)
によってプログラムが終了します。
以上のように、PythonではKeyboardInterrupt
やsignal
モジュールを使って、キーボード割り込みによるプログラムの終了を制御することができます。これらの機能を理解し、適切に使用することで、より柔軟なプログラムを作成することが可能です。