Python 中捕獲鍵盤中斷錯誤

Vaibhhav Khetarpal 2023年10月10日
  1. 使用 try...except 語句捕獲 Python 中的 KeyboardInterrupt 錯誤
  2. 在 Python 中使用訊號處理程式捕獲的 KeyboardInterrupt 錯誤
Python 中捕獲鍵盤中斷錯誤

當使用者使用 Ctrl + CCtrl + Z 手動嘗試停止正在執行的程式時,或在 Jupyter Notebook 的情況下通過中斷核心,會發生 KeyboardInterrupt 錯誤。為了防止經常發生的 KeyboardInterrupt 的意外使用,我們可以在 Python 中使用異常處理。

在本指南中,你將學習如何在 Python 中捕獲 KeyboardInterrupt 錯誤。

使用 try...except 語句捕獲 Python 中的 KeyboardInterrupt 錯誤

try...except 語句用於 Python 中的異常處理目的。try...except 語句具有獨特的語法;它分為三個塊,所有這些塊在 Python 程式碼中都有不同的用途和功能。

  • try 塊包含直譯器必須檢查任何錯誤的程式碼群。
  • except 塊用於新增所需的異常並繞過程式碼錯誤。
  • finally 塊包含需要在不檢查的情況下執行並被 tryexcept 塊忽略的語句。

為了解釋 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 允許在一段程式碼中定義儘可能多的 except 塊。

在 Python 中使用訊號處理程式捕獲的 KeyboardInterrupt 錯誤

signal 模組用於提供在 Python 中使用訊號處理程式的功能和機制。我們可以捕捉到 SIGINT 訊號,它基本上是來自鍵盤 Ctrl+C 的中斷。發生這種情況時,提高 KeyboardInterrupt 是預設操作。

Python 中的 sys 模組用於提供幾個必要的變數和函式,用於操作 Python 執行時環境的不同部分。

signalsys 模組需要匯入到 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 Khetarpal avatar Vaibhhav Khetarpal avatar

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