为什么 Ctrl + C 不能终止终端中运行的 Python?

为什么 Ctrl + C 不能终止终端中运行的 Python?

我试图理解为什么当我在无限循环中按下 Ctrl + C 时整个 Python 进程不会被终止,或者就此而言,我在终端中运行的任何 Python 函数都不会被终止,而只有循环/函数被停止?

答案1

这是因为 Python 解释器和交互式会话的设计。

Ctrl + C 发送信号,信号情报,传递给 Python 进程,Python 解释器通过引发键盘中断异常在当前运行的范围内。

如果解释器在交互式会话中运行(即通过运行pythonpython3在控制台),则当前函数中的异常将被打印并返回到 Python 提示符。如果解释器正在运行脚本(例如通过python3 my_script.py),则除非脚本处理了 KeyboardInterrupt,否则整个程序将在引发异常时停止。

答案2

值得从文档中指出的是,您需要KeyboardInterrupt明确处理,即使您已经有了Exception

The exception inherits from BaseException so as to not be accidentally caught by code that catches Exception and thus prevent the interpreter from exiting.

相关内容