Python 3中的KeyboardInterrupt错误

14

我注意到在任何Python 3程序中,无论它有多基础,如果按下CTRL + C,程序都会崩溃,例如:

test=input("Say hello")
if test=="hello":
    print("Hello!")
else:
    print("I don't know what to reply I am a basic program without meaning :(")

如果按下CTRL c,将会出现“KeyboardInterrupt”错误。是否有任何方法可以防止程序崩溃?
我之所以想这样做,是因为我想让我的程序无误差。每当我想将某些内容粘贴到输入框中时,我不小心按下CTRL c,就必须重新运行程序...这太烦人了。

4
Ctrl + C的整个意义就在于此,它是一个热键,用于退出你正在运行的任何程序。 - Morgan Thrapp
真的吗?从来不知道 Python 中有这样的东西。 - E_J
3
不仅是Python,任何在命令行中运行的东西都是如此。自从早期UNIX系统以来就是这样。 - Morgan Thrapp
哦,我刚开始学编程,只有14岁,甚至不知道UNIX系统是什么,但我想这很合理。 - E_J
2个回答

20
无论你多么不想要,按下Control-C都会引发一个KeyboardInterrupt。然而,你可以相当轻松地处理这个错误,例如,如果你想要在获取输入时要求用户按两次control-c才能退出,你可以做如下操作:
def user_input(prompt):
    try:
        return input(prompt)
    except KeyboardInterrupt:
        print("press control-c again to quit")
    return input(prompt) #let it raise if it happens again

或者为了强制用户输入任何次数的Control-C,您可以尝试以下操作:
def upset_users_while_getting_input(prompt):
    while True: # broken by return
        try:
            return input(prompt)
        except KeyboardInterrupt:
            print("you are not allowed to quit right now")

虽然我不推荐第二个选项,因为使用快捷方式的人会很快对你的程序感到烦恼。

恭喜达成1万个赞 :-) - MartyIX
顺便提一下,如果你使用的是 Mac,复制是 command-c,而 KeyboardInterupt 是 control-c,所以当我复制东西时从来没有遇到过这个问题。;P - Tadhg McDonald-Jensen

0
此外,在您的程序中,如果有人输入“Hello”,它不会回复hello,因为第一个字母是大写的,所以您可以使用以下代码:
if test.isupper == True:
  print("Hello!")

请在您的回答中提供更多细节。目前的写法让人难以理解您的解决方案。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接