ValueError:需要超过1个值进行解包

10 投票
19 回答
28456 浏览
提问于 2025-04-16 08:53

免责声明:我看过这个帖子,链接在这里 Python错误:“ValueError: need more than 1 value to unpack”,但是没有一个答案能真正解释怎么让代码运行。

我正在阅读《Learn Python the Hard Way》,现在在第13个练习。

这是我在Python 2.7的IDLE(我不知道它真正叫什么)中尝试运行的代码:

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

运行时,我遇到了这个错误:

“回溯(最近的调用最后): 文件 "C:\Python\LPTHW\examples_LPTHW\ex13.py",第3行,在 script, first, second, third = argv ValueError: need more than 1 value to unpack”

我尝试通过Windows命令提示符运行程序,但没有成功。我也尝试在IDLE和命令提示符中输入:“python ex13.py first 2nd 3rd”,结果也是同样的错误。

我该如何让这段代码运行,我到底做错了什么?

编辑:@John Machin,我做了一个和你发的完全一样的程序,保存为.py文件,然后进入我文件保存的正确目录,使用“python yourcode.py B C D”运行程序,结果收到以下信息:“python 不是内部或外部命令...” 当我只输入程序的名字运行时(这对其他所有程序都有效),却收到一个错误,提示“SyntaxError: invalid syntax on line 2: print len(argv), repr(argv)”。

编辑2(使用新代码):@John Machin,我逐字复制了你的程序到gedit,并像往常一样制作了.py文件。我打开我的终端(命令提示符)并输入:

python ex13c.py B C D

然后我得到了:

'python' is not recognized as an internal or external command, operable program or batch file."

接着我输入:

ex13c.py

然后我得到了:

3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)]
1 ['C:\\Python\\LPTHW\\examples_LPTHW\\ex13c.py']
Traceback (most recent call last):
  File "C:\Python\LPTHW\examples_LPTHW\ex13c.py". line 4, in (module)
    a, b, c, d = argv
ValueError: need more than 1 value to unpack

请记住,我在使用64位的Windows 7,并且Zed在教2.X版本,而我到目前为止一直在使用2.7。其他所有例子都能正常工作。在我开始第11个例子之前,我为另一本即将开始阅读的书安装了3.1。每次我使用2.7自带的IDLE。也许我在尝试用2.7编写代码时,不小心使用了3.1?

谢谢你耐心地看完这些。

19 个回答

2

把你的代码简化成这四行:

from sys import argv
print len(argv), repr(argv)
a, b, c, d = argv
print a, b, c, d

然后在命令提示符窗口中输入

python yourcode.py B C D

接着把结果完整复制粘贴到你问题的编辑里。确保显示出任何语法错误产生的^符号。同时也要显示你运行的确切代码:type yourcode.py

编辑 用这个替代:

from sys import argv, version
print(version)
print(len(argv), repr(argv))
a, b, c, d = argv
print(a, b, c, d)

编辑 2

第一次尝试:你输入了 python ex13c.py B C D,结果没有任何反应。 现在试试:c:\PYTHON\python ex13c.py B C D (我根据之前的信息假设这是某个版本的Python所在的位置)

第二次尝试:你输入了 ex13c.py,没有参数(为什么呢?)结果是:(1).py 文件似乎与某个3.1.3版本的Python可执行文件关联,因为这是最后安装的版本;(2)因为你没有提供参数,len(argv) 是 1,argv 只包含了脚本的路径。

建议:

你想在同一台机器上同时安装2.7和3.1,这是完全可行的(我有3.1和2.1到2.7的版本,因为我需要支持在这些版本上运行的软件,还有1.5.2是为了怀旧),只需要稍微注意一下。你需要做的主要事情是:(1)在目录 c:\pythonXY 中安装 Python X.Y;(2)像这样从命令行运行脚本:\python27\python myscript.py arg1 arg2 等等;(3)不要像你现在这样,把自己的脚本和数据放在像 c:\Python31 这样的软件目录里。

所以:

A. 为“book1”和“book2”设置新的脚本和数据目录。把所有现有的代码和数据复制到这些新目录里。备份一下。

B. 卸载所有版本的Python。

C. 将2.7和3.1安装到各自的目录中。

D. 检查你能否从新的位置运行你的脚本。

2

试着这样运行它:“python test.py foo bar baz”

如果这样能正常工作,但如果不指定解释器就失败了,可以看看这里:http://bugs.python.org/issue7936

3

这个例子是可以运行的。看起来你可能没有正确地运行它。

首先,IDLE是一个有点特别的环境,我从来没觉得它有什么用,直接用普通的Python解释器来运行就好了。

其次,要指定你Python解释器的完整路径。不要像这样:

 python ex13c.py B C D

在Windows上,你需要这样做:

 "C:\Program Filed\Python-2.7.1\Python.exe" ex13c.py B C D

在阅读第13章的练习时,我还注意到Zed在第13章之前把模块称为“特性”。这样做没有意义,只会让人困惑。他在某一章还告诉大家要记住逻辑表的输出,这简直是胡说。你不需要记住它们,你需要理解它们。

每次这本书在这里被提到时,我对它的印象就越来越差。我相信一定有更好的教程。也许《Dive into Python》会更好?

撰写回答