“错误”;无效语法";在Python shell中尝试使用输入/输出重定向时出现
我尝试在Python shell中练习输入/输出重定向。我有一个名为SentinelValue.py的文件,在该文件中,我有以下代码来将另一个文件中的数字相加:“错误”;无效语法";在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
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”&表示“无效语法”。
我不知道它为什么不工作。您的代码有几处错误:
- 正如评论中已经建议的那样,不要使用
进行直接用户输入(或者几乎在任何时候,在99%的情况下,当您认为需要时,您不需要!)。一个简单的eval()
转换应该足够了,而不会有int()
的所有危险eval()
- 与上一个连接,
计算输入。此外,在Python2.x上,eval()
本身进行求值(它相当于input()
),因此每当遇到无效输入时,就会弹出一个eval(raw\u input())
SyntaxError
- 即使它没有弹出一个
,它也肯定会弹出一个SyntaxError
,因为TypeError
需要一个字符串,并且它将从内部eval()
接收一个整数李>input()
- 您正在将“输入整数…”提示打印到STDOUT,这将导致它最终出现在
(在这里重定向STDOUT)output.txt
- 通过将内置的
用作变量之一,可以对其进行隐藏。这是一个糟糕的做法,可能会导致许多问题和意想不到的结果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中练习输入/输出重定向。”这就是错误的原因。