【问题标题】:Too many values to unpack太多值需要解压
【发布时间】:2012-09-27 05:53:04
【问题描述】:

我正在阅读学习 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 行,在 脚本,文件名 = argv
值错误:要解压的值太多

【问题讨论】:

  • 你是如何运行脚本的
  • 空闲通过power shell python filename.py script filename

标签: python argv


【解决方案1】:

只是几个指针......

from sys import argv  

script, filename, = argv 

在这里您导入 argv 以访问命令行参数,然后期望它包含 2 个参数 - 脚本 (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 具有文件名的值。我相信您想将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()

【讨论】:

    【解决方案2】:

    你是如何运行脚本的?

    当你说,

    script, filename = argv
    

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

    python myscript.py myfile.py somethingelse
    

    如果你想再传递一个参数给脚本,那么你需要指定第三个变量来解压这个值。像这样的

    script, filename, option = argv
    

    另外,如果您粘贴完整的回溯会有所帮助

    【讨论】:

    • 文件“ex15.py”,第 3 行,在
    • 文件“ex15.py”,第 3 行,在 脚本中,文件名 = argv 值错误:要解压的值太多
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      多了一个逗号

      script, filename, = argv
      

      应该是

      script, filename = argv
      

      【讨论】:

      • 应该没关系:a,b,=3,4 在 2.7 中可以正常工作。请注意,与正常的 Python 元组语法一样,尾随逗号被忽略。 (另一方面,a, = b 不等同于 a = b)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2010-12-01
      相关资源
      最近更新 更多