为什么此python键盘中断不起作用?(在pycharm中)

Edw*_*win 7 python keyboardinterrupt pycharm try-except

在pycharm中调试代码时,按Ctrl + C时,我的python try / except循环似乎不会触发键盘中断。我的代码如下所示:

numbers = []
loop = True

try: 
    # ===========SUBROUTINES==================

    def help():
        print("To view the list type 'view'"
              "\n To add an item type 'add'"
              "\n To remove an item type 'remove'"
              "\n To exit type exit or Ctrl + c can be used at any time")

    # =========SUBROUTENES END===============


    while loop:
        task = input("What do you want to do? Type \"help\" for help:- ")
        if task == 'help':
            help()
        else:
            print("Invalid return please try again.")

    except KeyboardInterrupt:
        exit()
Run Code Online (Sandbox Code Playgroud)

编辑:我的精简代码工作似乎出现了一些问题,并且没有产生相同的错误。完整的代码可以在这里查看。我还重新整理了代码(上面的代码),并产生了相同的错误。

小智 18

我知道这是一个老问题,但我遇到了同样的问题,并认为有一个更简单的解决方案:

在 PyCharm 中,转到“运行”/“编辑配置”并选中“在输出控制台中模拟终端”。PyCharm 现在接受键盘中断(确保控制台聚焦)。

测试:PyCharm 2019.1(社区版)


tde*_*ney 6

从屏幕截图中可以看出,您正在IDE中运行此代码。关于IDE的问题是它们与正常运行并不完全相同,尤其是在处理键盘字符时。按ctrl-c的方式,IDE认为您要复制文本。python程序永远看不到字符。也许在运行时会弹出一个单独的窗口?然后,您将在ctrl-c之前选择该窗口。

  • 只适合想要使用此问题的人:pycharm中的键盘中断快捷键是Ctrl + F2 (6认同)
  • 不,Ctrl-F2等效于按下PyCharm的“停止”按钮。这不会发送键盘中断-因此您的进程将简单地停止,而不是通过任何必要的清理退出。 (6认同)
  • 在最新版本的PyCharm中,您可以在“运行配置”中启用“在输出控制台中仿真终端”-这允许运行控制台中的Ctrl + C发送键盘中断。 (6认同)

Fri*_*h S 5

console_thrift.KeyboardInterruptExceptionPyCharm 的 Python 控制台在 Ctrl-C 而不是 上引发异常KeyboardInterrupt。该异常console_thrift.KeyboardInterruptException不是 的子类KeyboardInterrupt,因此不会被该行捕获except KeyboardInterrupt

添加以下行将使您的脚本与 PyCharm 兼容。

try:
    from console_thrift import KeyboardInterruptException as KeyboardInterrupt
except ImportError:
    pass
Run Code Online (Sandbox Code Playgroud)

这不会破坏在终端或其他 IDE(如 IDLE 或 Spyder)中运行脚本的兼容性,因为该模块console_thrift只能在 PyCharm 中找到。