在调试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()
编辑:我的瘦身代码工作似乎存在一些问题而且没有产生同样的错误。可以查看完整代码here。我还重新删除了代码(上面的代码),它产生了同样的错误。
答案 0 :(得分:11)
我知道这是一个古老的问题,但是我遇到了同样的问题,并认为有一个更简单的解决方案:
在PyCharm中,转到“运行” /“编辑配置”,然后选中“在输出控制台中仿真终端”。 PyCharm现在可以接受键盘中断(请确保控制台聚焦)。
经过以下测试: PyCharm 2019.1(社区版)
答案 1 :(得分:4)
在屏幕截图中,您似乎在IDE中运行此代码。关于IDE的事情是它们与正常运行并不完全相同,尤其是在处理键盘字符时。按ctrl-c的方式,IDE认为您要复制文本。 python程序永远不会看到角色。 Pehaps它在运行时会显示一个单独的窗口?然后你可以在ctrl-c之前选择那个窗口。
答案 2 :(得分:3)
PyCharm的Python控制台在Ctrl-C而不是console_thrift.KeyboardInterruptException
上引发异常KeyboardInterrupt
。例外console_thrift.KeyboardInterruptException
不是KeyboardInterrupt
的子类,因此没有被行except KeyboardInterrupt
捕获。
添加以下行将使您的脚本与PyCharm兼容。
try:
from console_thrift import KeyboardInterruptException as KeyboardInterrupt
except ImportError:
pass
这不会破坏在终端或其他IDLE或Spyder等IDE中运行脚本的兼容性,因为模块console_thrift
仅在PyCharm中找到。
答案 3 :(得分:2)
如果您发现按下Ctrl + C时PyCharm引发异常,您还可以使用PyCharm的Python控制台并使用Ctrl +C。我在下面编写了一个名为is_keyboard_interrupt
的简短函数,该函数告诉您异常是否为KeyboardInterrupt,包括PyCharm。如果不是,只需重新加注即可。我在下面粘贴了代码的简化版本。
运行时:
注意:这不适用于PyCharm的调试器控制台(由“ Debug”而不是“ Run”调用的控制台),但是对Ctrl + C的需求较少,因为您只需按一下暂停按钮即可。
我还将其放在我的要点上,我可以在其中进行更新:https://gist.github.com/yulkang/14da861b271576a9eb1fa0f905351b97
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!')
答案 4 :(得分:1)
如果该评论无法解决您的问题,(来自@tdelaney)您需要关注您的shell窗口(意味着您在程序运行时点击它。)然后您可以使用 Control + C
答案 5 :(得分:1)
按ctrl + c确保选中该窗口。我刚刚在IDLE中运行你的程序,它对我来说很有效。
答案 6 :(得分:1)
这是正常工作,因为我在你的代码中放了一个变量“x”,而我使用 tabs 代替 spaces 。
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()
答案 7 :(得分:1)
尝试shift + control + C。它对我有用。
答案 8 :(得分:0)
在shell中标记文本时,
只需取消标记文本并再次按