尝试在Python Shell中使用输入/输出重定向时出现错误“无效语法”

时间:2018-08-05 04:39:36

标签: python

我尝试在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语法”。 我不知道为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

您的代码有几处错误:

  • 正如评论中已经建议的那样,请勿将eval()用于直接的用户输入(或在几乎任何时候,在99%的情况下,如果您认为自己需要输入-则不需要!)。一个简单的int()转换应该足够了,而没有eval()的所有危险。
  • 与前一个连接,eval()评估输入。此外,在Python 2.x input()本身上进行求值(等效于eval(raw_input())),因此,每当遇到无效输入时,它将弹出SyntaxError
  • 即使它没有弹出SyntaxError,也很可能会弹出TypeError,因为eval()需要一个字符串,并且它将从内部{{1} }。
  • 您正在将“输入整数...”提示打印到STDOUT,这将导致它最终出现在您的input()(重定向STDOUT的位置)中。
  • 您正在通过将内置output.txt用作变量之一来对其进行阴影处理。这是一种不良做法,可能会导致许多问题并最终产生意想不到的结果。

因此,请记住所有这些,下面是重写它以解决这些问题的方法:

sum()