键盘中断异常

4

我在pycharm 3.8中处理异常很困难:

当我按下ctrl+c运行我的程序时,它无效,所以有人告诉我使用pycharm控制台进行测试,这样就可以打断键盘输入。

def readFloat(msg):
    while True:
        try:
            return float(input(f'{msg}'))
        except (ValueError, TypeError):
            print(f'\033[31mError. Not valid.\033[m')
            continue
        except KeyboardInterrupt:
            print('\033[31mYou didn\'t type a number.\033[m')
            return 0


b = readFloat('Your Number: ')
print(f'\nThat\'s your number: {b}')

但是现在,当我尝试使用Control+C时,它不会捕获我的异常并打印出自定义的错误报告,而是返回0。它给出了一些巨大而红色的错误行:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/User/PycharmProjects/Curso/Aula 23/ex113.py", line 35, in <module>
    b = readFloat('Your Number: ')
  File "C:/Users/User/PycharmProjects/Curso/Aula 23/ex113.py", line 26, in readFloat
    return float(input(f'{msg}'))
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_stdin.py", line 64, in readline
    requested_input = self.rpc_client.requestInput()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\pydev\_pydev_comm\pydev_transport.py", line 226, in _req
    return super(TSyncClient, self)._req(_api, *args, **kwargs)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\third_party\thriftpy\_shaded_thriftpy\thrift.py", line 160, in _req
    return self._recv(_api)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\third_party\thriftpy\_shaded_thriftpy\thrift.py", line 192, in _recv
    raise v
console_thrift.KeyboardInterruptException: KeyboardInterruptException()

我试图添加一个通用异常来打印错误类,然后我得到了这个:

Error found: <class 'console_thrift.KeyboardInterruptException'>

我无法检测到除了 keyboardInterrupt 之外的异常并处理它,只能使用通用异常,有什么想法吗?

编辑

我唯一添加的插件是一个主题UI,使pycharm完全黑色化,其余的都是安装时自带的。我使用CMD运行.py文件,它可以正常工作,并检测到键盘中断。

2个回答

0

试试这个:

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

-1

参考:为什么这个Python键盘中断在Pycharm中不起作用?

关于IDE的事情是,它们与正常运行并不完全相同,特别是在处理键盘字符方面。你按下ctrl-c的方式,你的IDE认为你想要复制文本。Python程序从未看到该字符。也许在运行时会弹出一个单独的窗口?那么在按下ctrl-c之前,您需要选择该窗口。


抱歉,我以为提供参考就足够了。而且我不知道如何将答案标记为重复。从现在开始我会查一下的。谢谢。 - Karthik Radhakrishnan
提供链接确实可以避免抄袭,但更好的做法是按照网站政策,将人们引导到现有的答案,而不是在各个地方复制粘贴相同的数据。在问题下面,您可以点击“关闭”->“重复”->然后提供您认为回答了问题的链接。 - Carcigenicate
在您获得这些选项之前,是否有最低声望点数要求? - Karthik Radhakrishnan
我原以为是500,但可能更高。在这种情况下,如果你没有权限,你可以在问题中发布一个链接建议重复,并且有权限的人可以代表你关闭它。 - Carcigenicate
关闭投票需要3000声望,但是一旦您获得了50声望,您可以标记为重复。 - Craig

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