ValueError:int()的文本无效:使用python流重定向时
我在Python中使用标准流重定向。我有一个writer.py文件,如下所示ValueError:int()的文本无效:使用python流重定向时,python,stdin,eoferror,Python,Stdin,Eoferror,我在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(li
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时,它会返回文件的当前行stdin也被视为文件,或者在EOF到达时返回换行符
writer.py只返回4个元素,但是adder.py以无限循环的方式读取输入,因此当它读取了4个数字时,stdin为空,readline返回一个换行符,并且您无法将空白字符转换为int。事实上,您使用的是readline[:-1],因此在本例中,您只得到一个空字符串
另一方面,您的打印在无限循环之后,因此即使您使用KeybordInterrupt停止打印,也不会调用它。我建议使用以下方法:
line = sys.stdin.readline()[:-1]
while line:
#do stuff
line = sys.stdin.readline()[:-1]
很可能是因为你想把一个线终结者投射到int.@BoboDarph,是的,我也这么想。但是shud'Exception EOFError:break'不能处理这个问题吗?EOF发生在之后的下一次读取中。当我使用它时,它跳过第一个元素,并给出其余三个元素的总和。@Sarang你应该把代码的其余部分放在do的位置。第二条读线必须位于循环的末尾。你可以用休息代替,就像rishi kant在他的解决方案中所做的那样。