Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么键盘中断在python中不起作用?_Python - Fatal编程技术网

为什么键盘中断在python中不起作用?

为什么键盘中断在python中不起作用?,python,Python,为什么代码不像下面的catch 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应该离开循环。事实并非如此 关于我做错了

为什么代码不像下面的catch 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
应该离开循环。事实并非如此

关于我做错了什么有什么帮助吗?

很有效

我在用Ubuntu Linux,你呢?
使用MaxVal=10000000之类的东西再次测试,听起来程序在control-c被点击时已经完成了,但是您的操作系统还没有完成显示所有输出

代码流程如下:

  • for
    从列表中抓取新对象(由
    range
    生成)并将
    i
    设置为该对象
  • 试试看
  • 打印
  • 返回到
    1
  • 如果在第1部分中按CTRL-C,则它不在
    try
    /
    的范围内,但
    除外,因此它不会捕获异常

    请尝试以下方法:

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

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


    您正在像PyCharm这样的IDE中运行此代码。IDE将ctrl+c(键盘中断)作为副本。试着在终端上运行你的代码。

    它在Windows、Python 2.5上对我有效。你没有告诉我们发生了什么!是中断被忽略了,还是在没有打印“完成”的情况下停止了程序?我明白了。在Pythonwin(pythonide)中运行时不会中断。如果从命令行调用,它会完全中断。看来这是Pythonwin的一个问题。我认为打印(“完成”)应该在except块内完成,或者您的代码似乎没有遵循很好的实践。异常永远不应该只是pass@J.C.Rocamonde在这段特定的代码中,OP希望忽略CTRL-C,并在所有情况下打印“done”。如果我将
    print
    语句放在
    except
    子句中,则仅当按下ctrl-c时才会打印,而当for循环正常完成时不会打印。异常可以在预期的情况下通过,而您只想忽略异常,不做任何处理。这是一个有效的方法,只要你知道你忽略了什么。我想说,没有指定异常类的bare
    except
    是不好的,但是
    pass
    是可以的;印刷品应该是无所谓的。我错误地认为(不知道为什么)循环是无限的。抱歉抱怨:)你这么说是因为?很好的尝试只是猜测他正在使用IDE。它可以在交互控制台上运行,也可以在终端上运行……或者问题可能取决于IDE,如果这真的是问题的话,我知道这篇文章有点老了,但我增加了它,因为我遇到了这个问题,这个解决方案很有帮助。终端机修好了。