我正在努力学习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
值错误:解压缩的值太多
答案 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