ValueError: invalid literal for int() : while using python stream redirection

ValueError: invalid literal for int() : while using python stream redirection

我在 Python 中使用标准流重定向。我有一个 writer.py 文件如下。

for data in (123, 0, 999, 42):
    print('%03d' % data)

它的输出被用作加法程序的输入。

import sys 
sum = 0 
while True:
    try:
      line = sys.stdin.readline()[:-1]
    except EOFError: break
    else:
        sum += int(line)
print(sum)

将第一个脚本的输出提供给其他脚本:

python writer.py | python adder.py

这给我的错误是:

 File "adder.py", line 9, in <module>
    sum += int(line)
ValueError: invalid literal for int() with base 10: ''

需要在 adder.py 脚本中更改什么。

您的 adder.py 文件应如下所示:

import sys
sum = 0
while True:
    line = sys.stdin.readline()[:-1]
    if line:
        sum += int(line)
    else:
        break

print(sum)

希望能解决你的问题

当您调用 readline() 时,它 returns 文件的当前行(stdin 也被视为文件)或 returns 到达换行符 EOF。 (doc)

你的 writer.py returns 只有 4 个元素,但是你的 adder.py 在无限循环中读取输入,所以当它读取了 4 个数字时,stdin 为空并且 readline() returns换行符,不能将空白字符转换为int。事实上,您使用的是 readline()[:-1] 所以在您的情况下您得到的只是一个空字符串。

另一方面,你的打印在无限循环之后,所以它永远不会被调用(即使你用 KeybordInterrupt 停止它)。我建议使用类似的东西:

line = sys.stdin.readline()[:-1]
while line:
    #do stuff
    line = sys.stdin.readline()[:-1]