我尝试在Python Shell中练习输入/输出重定向。我有一个名为SentinelValue.py的文件,在该文件中,我可以用以下代码将数字累加到另一个文件中:
data = eval(input("Enter an integer (the input ends " + "if it is 0): "))
sum = 0
while data != 0:
sum += data
data = eval(input("Enter an integer (the input ends " + "if it is 0): "))
print("The sum is", sum)
另一个文件“ Numbers.txt”包含数字:
1
2
3
4
5
6
7
8
9
0
我的output.txt文件是我想要显示总和的地方。
我尝试使用:
python SentinelValue.py < Numbers.txt > output.txt
但是在shell上,它突出显示“ SentinelValue”并说“ invalid语法”。 我不知道为什么它不起作用。
答案 0 :(得分:0)
您的代码有几处错误:
eval()
用于直接的用户输入(或在几乎任何时候,在99%的情况下,如果您认为自己需要输入-则不需要!)。一个简单的int()
转换应该足够了,而没有eval()
的所有危险。eval()
评估输入。此外,在Python 2.x input()
本身上进行求值(等效于eval(raw_input())
),因此,每当遇到无效输入时,它将弹出SyntaxError
。SyntaxError
,也很可能会弹出TypeError
,因为eval()
需要一个字符串,并且它将从内部{{1} }。 input()
(重定向STDOUT的位置)中。output.txt
用作变量之一来对其进行阴影处理。这是一种不良做法,可能会导致许多问题并最终产生意想不到的结果。因此,请记住所有这些,下面是重写它以解决这些问题的方法:
sum()