为什么KeyboardInterrupt在python中不起作用?

use*_*503 8 python

为什么不像以下代码一样捕获CTRL-C?

MAXVAL = 10000
STEP_INTERVAL = 10

for i in range(1, MAXVAL, STEP_INTERVAL):
    try:
        print str(i)
    except KeyboardInterrupt:
        break

print "done"
Run Code Online (Sandbox Code Playgroud)

我的期望是 - 如果在程序运行时按下CTRL-C,KeyboardInterrupt则应该离开循环.它不是.

对我做错的任何帮助?

小智 18

听起来这个程序是在时间控制-c被击中的情况下完成的,但是你的操作系统还没有完成显示所有的输出..


nos*_*klo 14

代码流程如下:

  1. for从列表中获取新对象(由...生成range)并设置i为它
  2. try
  3. print
  4. 回去吧 1

如果在第1部分中按CTRL-C,它就在try/ 之外except,因此它不会捕获异常.

试试这个:

MaxVal = 10000
StepInterval = 10

try:
    for i in range(1, MaxVal, StepInterval):
        print i
except KeyboardInterrupt:
    pass

print "done"
Run Code Online (Sandbox Code Playgroud)

  • @JCRocamonde 在这个特定的代码中,OP 希望忽略 CTRL-C,并在所有情况下打印“完成”。如果我将 print 语句放在 except 子句中,那么只有在按 ctrl-c 时才会打印它,而在 for 循环正常完成时不会打印。异常可以在预期的时候“通过”,而您只想忽略它,而不做任何事情。只要您知道自己忽略了什么,这就是一种有效的方法。我想说,不指定异常类的裸露“ except”是不好的,但“ pass”很好。 (2认同)

小智 6

我遇到了同样的问题,我刚刚找到了解决方案:

您正在 PyCharm 之类的 IDE 中运行此代码。IDE 将 ctrl+c(键盘中断)作为副本。尝试在终端中运行您的代码。