我正在阅读Zed A. Shaw的“偷看PYTHON HARD WAY”。在第13章中,我得到了以下代码
ValueError: not enough values to unpack (expected 4, got 1)
我试图在spyder上运行它但是发生了错误。我将粘贴spyder控制台的最后一行 {{1}}
请帮我解决问题,谢谢。
答案 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=1
,b=2
,c=3
和d=4
。
所以希望您现在可以完全看到,您的代码只打印出在命令行传递的四个参数,这些参数是脚本名称,并且3
更多参数如上所述。
您获得的error
:
ValueError: not enough values to unpack (expected 4, got 1)
是因为您没有传递这些3
额外变量,因此sys.argv
无法解压缩到4
,因为它只有一个元素:脚本名称。因此最后一点:(expected 4, got 1)
。
希望这有帮助!