Python 中捕获键盘中断错误
当用户使用 Ctrl + C 或 Ctrl + Z 手动尝试停止正在运行的程序时,或在 Jupyter Notebook 的情况下通过中断内核,会发生 KeyboardInterrupt
错误。为了防止经常发生的 KeyboardInterrupt
的意外使用,我们可以在 Python 中使用异常处理。
在本指南中,你将学习如何在 Python 中捕获 KeyboardInterrupt
错误。
使用 try...except
语句捕获 Python 中的 KeyboardInterrupt
错误
try...except
语句用于 Python 中的异常处理目的。try...except
语句具有独特的语法;它分为三个块,所有这些块在 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 允许在一段代码中定义尽可能多的 except
块。
在 Python 中使用信号处理程序捕获的 KeyboardInterrupt
错误
signal
模块用于提供在 Python 中使用信号处理程序的功能和机制。我们可以捕捉到 SIGINT
信号,它基本上是来自键盘 Ctrl+C 的中断。发生这种情况时,提高 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