python - 无法捕获 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
解决方案
当您不输入任何内容时,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
推荐阅读
- python - 解析和创建嵌套字典
- android - 商店没有有效的减速器。确保传递给 combine reducers 的参数是一个其值为 reducers 的对象
- html - 导航栏定位 rtl ltr
- java - 带有 gRPC 的客户端服务器应用程序
- powerbi - Dax Time Intelligence 如何计算当周销售额
- django - 子域上的 Django + Nginx 错误请求 400
- python-3.x - 如何制作 asyncio.Queue 的深拷贝?
- node.js - DynamoDB Local throws Method Not Allowed via SDK
- python - ARSS 抛出分段错误
- ruby-on-rails - 安装 aws-sdk gem 后,网站停止在 heroku 上工作