def is_keyboard_interrupt(exception):
# The second condition is necessary for it to work with the stop button
# in PyCharm Python console.
return (type(exception) is KeyboardInterrupt
or type(exception).__name__ == 'KeyboardInterruptException')
try:
def print_help():
print("To exit type exit or Ctrl + c can be used at any time")
print_help()
while True:
task = input("What do you want to do? Type \"help\" for help:- ")
if task == 'help':
print_help()
else:
print("Invalid input.")
# to check that ValueError is handled separately
raise ValueError()
except Exception as ex:
try:
# Catch all exceptions and test if it is KeyboardInterrupt, native or
# PyCharm's.
if not is_keyboard_interrupt(ex):
raise ex
print('KeyboardInterrupt caught as expected.')
print('Exception type: %s' % type(ex).__name__)
exit()
except ValueError:
print('ValueError!')
9条答案
按热度按时间tzcvj98z1#
我知道这是一个老问题,但我遇到了同样的问题,并认为有一个更容易的解决方案:
在PyCharm中,转到“运行”/“编辑配置”并选中“在输出控制台中仿真终端”。PyCharm现在接受键盘中断(确保控制台被聚焦)。
测试日期:PyCharm 2019.1(社区版)
cs7cruho2#
从屏幕截图中可以看出,您正在IDE中运行这段代码。IDE的特点是它们与正常运行时不太一样,尤其是在处理键盘字符方面。按ctrl-c的方式,你的IDE认为你想复制文本。2 python程序从来没有看到过这个字符。3也许它在运行时会带出一个单独的窗口?然后,在按ctrl-c之前选择该窗口。
bjp0bcyl3#
PyCharm的Python控制台在Ctrl-C上引发异常
console_thrift.KeyboardInterruptException
而不是KeyboardInterrupt
。异常console_thrift.KeyboardInterruptException
不是KeyboardInterrupt
的子类,因此不会被except KeyboardInterrupt
行捕获。添加以下行将使您的脚本与PyCharm兼容。
这不会破坏在终端或其他IDE(如IDLE或Spyder)中运行脚本的兼容性,因为模块
console_thrift
只在PyCharm中找到。u5rb5r594#
如果该注解不能解决您的问题,(来自@tdelaney)您需要聚焦shell窗口(意味着您在程序运行时单击了它),然后可以使用Control+C
7fyelxc55#
你也可以使用PyCharm的Python控制台和使用Ctrl + C,如果你在按下Ctrl + C时捕捉到PyCharm引发的异常。我在下面写了一个名为
is_keyboard_interrupt
的简短函数,它告诉你这个异常是否是KeyboardInterrupt,包括PyCharm的异常。如果不是,只需重新引发它。我粘贴了下面代码的简化版本。运行时:
注意:这不适用于PyCharm的调试器控制台(由“Debug”而不是“Run”调用的控制台),但在那里对Ctrl + C的需求较少,因为您可以简单地按下暂停按钮。
我也把这个放在我的要点,我可以作出更新:https://gist.github.com/yulkang/14da861b271576a9eb1fa0f905351b97
mrwjdhj36#
这里是正常工作,因为我把一个变量“x”在你的代码,我用 * 制表符 * 而不是 * 空格 *。
q8l4jmvw7#
试试shift + control + C。我用的很好。
ipakzgxi8#
当你按下ctrl+c的时候,确保窗口被选中。我刚刚在IDLE中运行了你的程序,它对我来说非常好。
gjmwrych9#
如果〈Strg+C〉不能停止程序,一个可能的原因是:
当一个文本在shell中被标记时,〈Strg+C〉被解释为“将标记的文本复制到剪贴板”。
只需取消文本标记并再次按〈Strg+C〉即可。