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

时间:2009-02-12 21:53:42

标签: 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"

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

对我做错的任何帮助?

5 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:14)

代码流程如下:

  1. for从列表中抓取新对象(由range生成)并将i设置为
  2. try
  3. print
  4. 返回1
  5. 如果你在第1部分中点击了CTRL-C,它就在try / except之外,所以它不会捕获异常。

    请改为尝试:

    MaxVal = 10000
    StepInterval = 10
    
    try:
        for i in range(1, MaxVal, StepInterval):
            print i
    except KeyboardInterrupt:
        pass
    
    print "done"
    

答案 2 :(得分:2)

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

您在像PyCharm这样的IDE中运行此代码。 IDE将ctrl + c(keyboardinterrupt)作为副本。尝试在终端中运行您的代码。

答案 3 :(得分:1)

有效。

我正在使用Ubuntu Linux,你呢? 使用MaxVal = 10000000

之类的东西再次测试它

答案 4 :(得分:0)

它确实打破了循环并打印“完成”。