ValueError:需要超过1个值进行解包
免责声明:我看过这个帖子,链接在这里 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 个回答
把你的代码简化成这四行:
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. 检查你能否从新的位置运行你的脚本。
试着这样运行它:“python test.py foo bar baz”
如果这样能正常工作,但如果不指定解释器就失败了,可以看看这里:http://bugs.python.org/issue7936
这个例子是可以运行的。看起来你可能没有正确地运行它。
首先,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》会更好?