[英]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 的。
如果不是,只需重新加注即可。 我粘贴了下面代码的简化版本。
运行时:
输入“帮助”并按 Enter 重复循环。<\/li>
键入其他任何内容并按 Enter 以检查 ValueError 是否得到正确处理。<\/li>
按 Ctrl + C 检查是否捕获了 KeyboardInterrupt,包括在 PyCharm 的 python 控制台中。<\/li><\/ul> 注意:这不适用于 PyCharm 的调试器控制台(由“调试”而不是“运行”调用的控制台),但对 Ctrl + C 的需求较少,因为您只需按下暂停按钮即可。
我也把它放在我的 Gist 上,在那里我可以进行更新: https<\/a> :\/\/gist.github.com\/yulkang\/14da861b271576a9eb1fa0f905351b97
这里工作正常,因为我在您的代码中放置了一个变量“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.