Python で KeyboardInterrupt エラーをキャッチする
-
try...exceptステートメントを使用して Python のKeyboardInterruptエラーをキャッチする -
Python でシグナルハンドラーを使用して
KeyboardInterruptエラーをキャッチする
KeyboardInterrupt エラーは、ユーザーがCtrl + CやCtrl + Zコマンドを使ったり、Jupyter Notebook の場合はカーネルに割り込んだりして、実行中のプログラムを手動で停止させようとしたときに発生します。しばしば発生する KeyboardInterrupt の意図しない使用を防ぐために、Python の例外処理を利用することができます。
このガイドでは、Python で KeyboardInterrupt エラーをキャッチする方法を学習します。
try...except ステートメントを使用して Python の KeyboardInterrupt エラーをキャッチする
try...except ステートメントは、Python での例外処理の目的で使用されます。try...except ステートメントには固有の構文があります。これは 3つのブロックに分割されており、Python コードではすべて異なる目的と機能を持っています。
tryブロックには、インタープリターがエラーをチェックする必要のあるコードのクラスターが含まれています。exceptブロックは、必要な例外を追加し、コードのエラーをバイパスするために使用されます。finallyブロックには、チェックせずに実行し、tryおよびexceptブロックで無視する必要のあるステートメントが含まれています。
Python の KeyboardInterrupt のコードを説明するために、KeyboardInterrupt 例外を手動で処理しながらユーザーに入力を求める簡単なプログラムを取り上げます。
次のコードは、try...except ステートメントを使用して、Python の KeyboardInterrupt エラーをキャッチします。
try:
x = input()
print("Try using KeyboardInterrupt")
except KeyboardInterrupt:
print("KeyboardInterrupt exception is caught")
else:
print("No exceptions are caught")
上記のプログラムは、次の出力を提供します。
KeyboardInterrupt exception is caught
上記のコードでは、入力関数は try ブロックの間にあり、この場合は詳細が必要ないため、空のままになっています。次に、except ブロックが KeyboardInterrupt エラーを処理します。KeyboardInterrupt エラーは手動で発生するため、KeyboardInterrupt プロセスがいつ発生したかを識別できます。
Python では、ユーザーがコードのチャンクで必要な数の例外ブロックを定義できます。
Python でシグナルハンドラーを使用して KeyboardInterrupt エラーをキャッチする
signal モジュールは、Python でシグナルハンドラーを使用する関数とメカニズムを提供するために使用されます。基本的にキーボード Ctrl+C からの割り込みである SIGINT シグナルをキャッチできます。これが発生した場合、KeyboardInterrupt を上げることがデフォルトのアクションです。
Python の sys モジュールは、Python ランタイム環境の個別の部分を操作するために使用されるいくつかの必要な変数と関数を提供するために使用されます。
このメソッドをエラーなしで正常に使用するには、signal および sys モジュールを Python コードにインポートする必要があります。
次のコードは、シグナルハンドラーを使用して、Python の KeyboardInterrupt エラーをキャッチします。
import signal
import sys
def sigint_handler(signal, frame):
print("KeyboardInterrupt is caught")
sys.exit(0)
signal.signal(signal.SIGINT, sigint_handler)
上記のコードは次の出力を提供します。
KeyboardInterrupt is caught
上記のコードでは、signal.signal() 関数を使用して、特定のタイプのシグナルを受信したときに実行されるカスタムハンドラーを定義しています。
ハンドラーは、特定のシグナルに設定されると、ユーザーが手動でリセットするまでインストールされたままになることに注意してください。この場合、唯一の例外は SIGCHLD のハンドラーです。
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn