【问题标题】:"ValueError: too many values to unpack" in Learn Python The Hard Way, Ex 13Learn Python The Hard Way, Ex 13 中的“ValueError: too many values to unpack”
【发布时间】:2015-07-19 02:56:33
【问题描述】:

我使用的是 Macbook Pro,运行 OS X Yosemite 10.10.4,并且正在完成 Learn Python the Hard Way 中的练习。我在 iPython 笔记本上运行这些,它们的配置如下:

Python 2.7.10 |Anaconda 2.2.0 (x86_64)| (默认,2015 年 5 月 28 日, 17:04:42) [GCC 4.2.1 (Apple Inc. build 5577)]

在 Ex13 上,在 http://learnpythonthehardway.org/book/ex13.html 上列出 我在网站上输入和/或复制了准确​​的代码,但出现错误。

from sys import argv
script, first, second, third = argv
print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

在运行上述代码时,我收到的错误信息是这样的:

ValueError Traceback(最近调用 最后)在() ----> 1 个脚本,第一个,第二个,第三个 = argv

ValueError:解包的值太多

我尝试逐行运行代码,发现问题出在我为 argv 分配多个值时。例如,下面的代码完全执行。

from sys import argv
script = argv
print "The script is called:", script

上述代码的输出是:

脚本被调用: ['/Users/myusername/anaconda/lib/python2.7/site-packages/IPython/kernel/ma​​in.py', '-F', '/Users/myusername/.ipython/profile_default/security/kernel-261810c2-9f04-44d4-95f7-411e0db361ff.json', '--profile-dir', '/Users/myusername/.ipython/profile_default']

这可能是什么原因,我该如何纠正它?

更新: 我尝试按照建议通过终端运行它,这就是我收到的响应。

【问题讨论】:

  • 你应该从命令行调用它,就像他们告诉你的那样。不要在这个练习中使用 ipython。
  • 基本上问题是您有 4 个参数,但您的脚本需要 3 个。尝试在您的元组解包之前放置一个 print(len(argv)) 并查看结果如何。如果那不是 4,那么您将遇到问题。第二个代码 sn -p 将打印整个 argv 而不管参数的数量,因此不是问题。
  • 谢谢,但这是 ipython 笔记本的限制,代码可以通过终端运行,但在使用笔记本时不能运行?
  • 嗯,只是您需要通过命令行传递代码参数,并且至少在我的计算机上 ipython 试图打开我作为文件传递的参数,这导致它出错: P
  • Invoke 你的脚本来自终端(不是 python 终端),命令行终端。 (并且不要在那里编写代码),首先将其保存为脚本,然后调用该脚本。

标签: python python-2.7 ipython-notebook


【解决方案1】:

正如错误所暗示的那样 - ValueError: too many values to unpack 。右侧的值太多,但左侧的名称/变量不足以全部接受。

在您的情况下,您的 argv 有 5 个元素,但您试图将它们存储在 4 个元素中。我猜这与 ipython-notebook 有关。

你应该从命令行(终端)调用你的脚本(就像练习告诉你的那样)-

python <file> <args> 

【讨论】:

    【解决方案2】:

    只需从终端执行您的脚本,如下所示:

    $> python ex13.py user_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2019-02-01
      • 1970-01-01
      • 2016-11-05
      • 2014-03-31
      相关资源
      最近更新 更多