Python代码未运行

时间:2017-09-10 13:02:45

标签: python python-2.7 python-3.x

我正在阅读Zed A. Shaw的“偷看PYTHON HARD WAY”。在第13章中,我得到了以下代码

ValueError: not enough values to unpack (expected 4, got 1)

我试图在spyder上运行它但是发生了错误。我将粘贴spyder控制台的最后一行 {{1}}

请帮我解决问题,谢谢。

4 个答案:

答案 0 :(得分:4)

当您运行脚本时,您不会传入任何命令行参数,即使它期望有3个参数。您之所以收到错误,是因为您尝试从args中提取的值多于其中包含的值。

命令行参数是您为程序提供的数据。在运行脚本时,只需将一些虚拟数据作为参数传递:

python your_script_here.py 1 2 3

1 2 3是传递的参数。

我的示例是从this tutorial修改的。值得一读。

答案 1 :(得分:1)

# your_code.py
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)

你可以这样运行:

python your_code.py one two three

所以你得到:

The script is called: your_code.py
Your first variable is: one
Your second variable is: two
Your third variable is : three

此致

答案 2 :(得分:0)

您获得的错误是因为您在运行文件时没有传递任何参数。 在运行文件时尝试传递参数。一个例子

python foo.py 1, 2, 3  

答案 3 :(得分:0)

在python中,sys.argv是一个包含传递给脚本的command-line参数的列表。

因此,例如,您可以创建一个名为testingArguments.py的python文件,该文件将打印从command-line解析的参数。

这个代码可能看起来像:

from sys import argv
print(argv)

然后从命令行运行命令:

python testingArguments.py arg1 arg2 3 

然后它将在list中打印出参数:

['testingArguments.py', 'arg1', 'arg2', '3']

您的代码所做的是,以同样的方式获取此list,然后解压缩就像list而不是sys.argv

a, b, c, d = [1, 2, 3, 4]

现在a=1b=2c=3d=4

所以希望您现在可以完全看到,您的代码只打印出在命令行传递的四个参数,这些参数是脚本名称,并且3更多参数如上所述。

您获得的error

ValueError: not enough values to unpack (expected 4, got 1)

是因为您没有传递这些3额外变量,因此sys.argv无法解压缩到4,因为它只有一个元素:脚本名称。因此最后一点:(expected 4, got 1)

希望这有帮助!