首页 > 解决方案 > 无法捕获 EOFError

问题描述

我对编写这段代码的期望是,我输入了一些数字,然后当我输入字符串时,输出是“无效”,但是当我按下回车键而不输入一些值时,输出是我们之前输入的数字的总和. 但是当我在 VSCode 上运行它时,每当我按 Enter 键时,结果总是“无效”,并且无法退出循环。

例如,我输入:1 2 3 a z那么我期望的输出是:Not valid Not valid 6

不知道怎么回事,2个月前刚学python。

sum = 0
while True:
    try:
        sum += int(input())
    except ValueError:
        print('Not Valid')
    except EOFError:
        print(sum)
        break

标签: pythonpython-3.xvisual-studio-codeeoferror

解决方案


当您不输入任何内容时,input()将返回空字符串。将其转换为整数是无效的,因此您会得到ValueError

>>> input() # next line is empty because I just pressed Enter

'' # `input()` returned the empty string
>>> int('') # can't convert it to an integer
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

要触发,请使用+EOFError发送 EOF 信号:CtrlD

>>> input()
^DTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
EOFError

这里^D代表我在键盘上按Ctrl+ (不是字面上输入“^D”)。D


推荐阅读