【问题标题】:Why won't KeyboardInterrupt work in Python when using Wing IDE 101?为什么在使用 Wing IDE 101 时 KeyboardInterrupt 在 Python 中不起作用?
【发布时间】:2016-07-21 01:16:42
【问题描述】:

我正在尝试循环执行某些操作(在此示例中打印为 100)并随时按“Ctrl+C”取消计数。

我正在使用的测试代码如下,但这不起作用(编辑:它在从终端启动的脚本中工作,但在我的 IDE 的 python shell 中运行时不起作用 - Wing 101)。 KeyboardInterrupt 没有捕捉到“Ctrl+C”命令或任何其他键。

import time     

i = 1
while (i < 101):
    try:
        print '%d percent complete' % i
        time.sleep(0.5)
        i += 1
    except KeyboardInterrupt:
        break 

我已经阅读了这个问题here,我很确定这不是我的问题,因为我已经输入了“time.sleep(0.5)”命令来减慢程序的速度。我也读过this question,但既然它已经 5 岁了,我认为这个错误现在已经修复了吗?我知道我可以使用线程来实现我想要的,但如果只是为了学习我想知道为什么这种方法不起作用。

我在 Ubuntu 14.04 中使用 python 2.7.6,如果能提供解决此问题的任何帮助或建议,我将不胜感激。 (编辑:我知道代码是独立工作的,但我仍然想知道为什么它在 Wing 101 IDE 的 python shell 中不起作用)

编辑 1

按照建议,我已尝试将 while 循环放入 try 块中:

try:
    i = 1
    while (i < 101):        
        print '%d percent complete' % i
        time.sleep(0.5)
        i += 1
except KeyboardInterrupt:
    break 

但不幸的是,这也不起作用,而是出现以下错误:

Traceback (most recent call last):
  File "/home/matt/autosys_repo1/python_test_scripts/test_refresh_line.py", line 13, in <module>
    break
'break' outside loop: <string>, line 13

【问题讨论】:

  • 您的方法与您链接的第一个线程中的答案之间存在差异。这家伙建议将循环语句放在 try 块中。您在 try/except 之外有 while 语句。你试过这样做吗?编辑:我试过你的代码,它按预期工作。
  • 感谢@Brnpzs 的建议。不幸的是,这也不起作用(见编辑 1)。是的,它似乎对其他人有用,所以我很困惑为什么它对我不起作用。我觉得它只是我忽略的一些小细节。
  • break 在while循环外没有意义,可以使用sys.exit(0)强制退出。为此,您需要先导入 sys 模块。
  • 恐怕也不行。它只是继续打印并且永远不会退出循环,直到 i = 100。我认为关键问题是 KeyboardInterrupt 无法识别按键。
  • 解决此问题的另一种方法是使用 signal handlers ,在这种情况下,您要处理 SIGINT ,如this 问题的答案所示。

标签: python python-2.7 keyboardinterrupt wing-ide


【解决方案1】:

这是 Wing IDE 101 的限制。停止此类循环的唯一方法是重新启动 shell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2017-10-12
    • 1970-01-01
    • 2012-11-28
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多