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