要解压缩的值太多

时间:2012-10-06 05:26:48

标签: python argv

我正在努力学习python, 在第15章我想使用import argv为变量分配变量和原始输入 用户输入。脚本是:

from sys import argv 

script, filename, = argv

txt = open(filename)

print " Here's your file %r :" % filename
print  txt.read()

print " I'll also ask you to type it again: "

file_again = raw_input ("> ")

txt_again = open (file_again)

print txt_again.read ()

运行此脚本后,我收到错误,解压缩的值太多了。

文件“ex15.py”,第3行,in script,filename = argv
值错误:解压缩的值太多

4 个答案:

答案 0 :(得分:2)

只需几点......

from sys import argv  

script, filename, = argv 

这里你导入argv来访问命令行参数,然后期望它包含2个参数 - script(arg 0)和要打印的文件名(arg1)。尽管尾随逗号在语法上不是不正确的,但它不是必需的,只是看起来有点奇怪。我正常地将argv留在sys内,而不是将其拉入当前的命名空间,但这是一个品味问题 - 它并没有真正的区别。我可能会抛出一些错误处理:

import sys

try:
    script, filename = sys.argv
except ValueError as e:
    raise SystemExit('must supply single filename as argument')

txt = (filename) 

print " Here's your file %r :" % filename 
print  txt.read() 

txt = (name)所做的就是让txt具有filename的值。我相信您希望将txt作为文件对象,以便您可以.read()

txt = open(filename)
print "Here's the file contents of:", filename
print txt.read()

print " I'll also ask you to type it again: "     
file_again = raw_input ("> ")     
txt_again = open (file_again)      
print txt.again.read ()

你在这里有open(),但txt.again.read()应为txt_again.read(),否则你会获得AttributeError - 所以只需改变它就可以了。

或者,文件对象支持搜索,因此您只需rewind该文件(因为您已经读到文件到最后,没有什么可以阅读了),使用:

txt.seek(0)
print txt.read()

答案 1 :(得分:0)

你是如何运行脚本的?

当你说,

script, filename = argv

您期待argv中有两项内容。第一个是脚本名称,第二个是文件名。如果您尝试使用超过2个参数运行脚本,那么您将收到此类错误

python myscript.py myfile.py somethingelse

如果要将另外一个参数传递给脚本,则需要指定第三个变量来将值解压缩到。像这样的东西

script, filename, option = argv

此外,如果您粘贴完整的追溯

,它会有所帮助

答案 2 :(得分:0)

O.K。所以我发现了我的问题 我没有正确调用我的脚本。 例如,我的py脚本是ex15.py 脚本它将使用rw输入和argv读取文本 变量。那个文件名是 ex15_sample。我用python ex15.py ex15_sample调用脚本,我对上次练习感到困惑。我在argv中使用我设置的变量来调用脚本。但所有的反馈都是 非常有帮助,我也申请了。

答案 3 :(得分:-1)

还有一个额外的逗号

script, filename, = argv

应该是

script, filename = argv