为什么键盘中断在python中不起作用?
为什么代码不像下面的catch CTRL-C为什么键盘中断在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应该离开循环。事实并非如此 关于我做错了
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
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循环正常完成时不会打印。异常可以在预期的情况下通过,而您只想忽略异常,不做任何处理。这是一个有效的方法,只要你知道你忽略了什么。我想说,没有指定异常类的bareexcept
是不好的,但是pass
是可以的;印刷品应该是无所谓的。我错误地认为(不知道为什么)循环是无限的。抱歉抱怨:)你这么说是因为?很好的尝试只是猜测他正在使用IDE。它可以在交互控制台上运行,也可以在终端上运行……或者问题可能取决于IDE,如果这真的是问题的话,我知道这篇文章有点老了,但我增加了它,因为我遇到了这个问题,这个解决方案很有帮助。终端机修好了。