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

“错误”;无效语法";在Python shell中尝试使用输入/输出重定向时出现,python,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 e

我尝试在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
python SentinelValue.pyoutput.txt
但在shell中,它突出显示了“SentinelValue”&表示“无效语法”。
我不知道它为什么不工作。

您的代码有几处错误:

  • 正如评论中已经建议的那样,不要使用
    eval()
    进行直接用户输入(或者几乎在任何时候,在99%的情况下,当您认为需要时,您不需要!)。一个简单的
    int()
    转换应该足够了,而不会有
    eval()
    的所有危险
  • 与上一个连接,
    eval()
    计算输入。此外,在Python2.x上,
    input()
    本身进行求值(它相当于
    eval(raw\u input())
    ),因此每当遇到无效输入时,就会弹出一个
    SyntaxError
  • 即使它没有弹出一个
    SyntaxError
    ,它也肯定会弹出一个
    TypeError
    ,因为
    eval()
    需要一个字符串,并且它将从内部
    input()
    接收一个整数
  • 您正在将“输入整数…”提示打印到STDOUT,这将导致它最终出现在
    output.txt
    (在这里重定向STDOUT)
  • 通过将内置的
    sum()
    用作变量之一,可以对其进行隐藏。这是一个糟糕的做法,可能会导致许多问题和意想不到的结果
因此,考虑到所有这些,下面是如何重写它以解决这些问题:

# Let's first make sure it works on Python 2.x and 3.x by shadowing the input
try:
    input = raw_input  # on Python 2.x use raw_input instead of input
except NameError:
    pass

result = 0  # tip: use a name that's not already built-in, like result
while True:  # loop 'forever'...
    data = input()  # don't print anything when asking for input
    try:
        data = int(data)  # don't print anything to STDOUT
        if not data:  # only if the integer is 0
            break
        result += data  # add to the final result
    except ValueError:  # risen if the input is not an integer...
        pass  # so just ignore it

print("The sum is: " + str(result))  # finally, print the result

您是否在OS shell命令行(右)或python命令行(错)上运行了该命令?并且从不使用
eval(input())
您需要使用较低级别的IO、
sys.stdin.read
sys.stdout.write
。我是在python命令行上编写的。有这个练习的书没有说明在哪里键入重定向,所以我假设它是python命令行。到目前为止,这本书只讨论了循环、while和if语句、计数以及其他一些基本主题,并且没有提到任何关于操作系统命令行的内容。我会详细调查的。非常感谢。正如OP所说,“我试图在Python shell中练习输入/输出重定向。”这就是错误的原因。