繁体   English   中英

"<i>Why doesn&#39;t this python keyboard interrupt work?<\/i>为什么这个 python 键盘中断不起作用?<\/b> <i>(in pycharm)<\/i> (在pycharm中)<\/b>"

[英]Why doesn't this python keyboard interrupt work? (in pycharm)

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

try:
    while loop:
        print("busy")

except KeyboardInterrupt:
    exit()

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

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

测试平台:PyCharm 2019.1(社区版)

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

"

PyCharm 的 Python 控制台在 Ctrl-C 而不是KeyboardInterrupt<\/code>上引发异常console_thrift.KeyboardInterruptException<\/code> 。 异常console_thrift.KeyboardInterruptException<\/code>不是KeyboardInterrupt<\/code>的子类,因此except KeyboardInterrupt<\/code>没有被行捕获。

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

try:
    from console_thrift import KeyboardInterruptException as KeyboardInterrupt
except ImportError:
    pass

如果该评论不能解决您的问题,(来自@tdelaney)您需要关注您的 shell 窗口(意味着您在程序运行时单击了它。)然后您可以使用Control<\/kbd> + C<\/kbd>

"

如果您捕获到 PyCharm 在按下 Ctrl + C 时引发的异常,您还可以使用 PyCharm 的 Python 控制台并使用 Ctrl + C。 我在下面写了一个名为is_keyboard_interrupt<\/code>的简短函数,它告诉您异常是否是 KeyboardInterrupt,包括 PyCharm 的。 如果不是,只需重新加注即可。 我粘贴了下面代码的简化版本。

运行时:

这里工作正常,因为我在您的代码中放置了一个变量“x”并且我使用制表符而不是空格

try:

    def help():
        print("Help.")

    def doStuff():
        print("Doing Stuff")

    while True:
        x = int(input())
        if x == 1:
            help()
        elif x == 2:
            doStuff()
        else:
            exit()

except KeyboardInterrupt:
    exit()

尝试shift + control + C<\/strong> 。 它对我有用。

"

确保在按 ctrl+c 时选择了窗口。 我刚刚在 IDLE 中运行了你的程序,它对我来说非常有效。

"

<Strg+C> 不停止程序的一种可能原因:

在 shell 中标记文本时,<Strg+C> 被解释为“将标记的文本复制到剪贴板”。

只需取消标记文本并再次按 <Strg+C> 即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM