Python 我需要多个值来解包值错误

Python 我需要多个值来解包值错误,python,Python,这是我的节目 from sys import argv script, first, second, third = argv print ("the script is:", script) print("the first variable is:", first) print("the second variable is:", second) print ("the third variable is:", third) 错误是: Traceback (most recent call

这是我的节目

from sys import argv
script, first, second, third = argv
print ("the script is:", script)
print("the first variable is:", first)
print("the second variable is:", second)
print ("the third variable is:", third)
错误是:

Traceback (most recent call last):
  File "C:/Users/ravikishore/PycharmProjects/Test/.idea/MyPython.py", line 2, in <module>
    [script, first, second, third] = argv
ValueError: need more than 1 value to unpack
回溯(最近一次呼叫最后一次):
文件“C:/Users/ravikishore/PycharmProjects/Test/.idea/MyPython.py”,第2行,在
[script,first,second,third]=argv
ValueError:需要超过1个值才能解包
假设您实际给它三个参数来解包,那么代码工作得很好,如下所示:

c:\pax> python yourProg.py A B C
the script is: yourProg.py
the first variable is: A
the second variable is: B
the third variable is: C
如果您没有为其提供足够的参数,则会出现问题:

c:\pax> python yourProg.py A
Traceback (most recent call last):
  File "yourProg.py", line 2, in <module>
    script, first, second, third = argv
ValueError: not enough values to unpack (expected 4, got 2)
假设您实际为其提供了三个参数来解包,则该代码工作正常,如下所示:

c:\pax> python yourProg.py A B C
the script is: yourProg.py
the first variable is: A
the second variable is: B
the third variable is: C
如果您没有为其提供足够的参数,则会出现问题:

c:\pax> python yourProg.py A
Traceback (most recent call last):
  File "yourProg.py", line 2, in <module>
    script, first, second, third = argv
ValueError: not enough values to unpack (expected 4, got 2)

argv
是一个列表:

>>> from sys import argv
>>> type(argv)
<type 'list'>
来自系统导入argv的
>>
>>>类型(argv)
因此,您正在尝试从列表到元组的转换,这仅在元组中的元素数与列表长度完全匹配时有效:

>>> a,b,c = [1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> a,b,c = [1,2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
>>> a,b,c = [1,2,3]
>>> a,b,c = [1,2,3,4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>a,b,c=[1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包
>>>a,b,c=[1,2]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要2个以上的值才能解包
>>>a,b,c=[1,2,3]
>>>a,b,c=[1,2,3,4]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:要解压缩的值太多

因此,在尝试转换之前,您需要添加一些关于
argv
长度的检查。

argv
是一个列表:

>>> from sys import argv
>>> type(argv)
<type 'list'>
来自系统导入argv的
>>
>>>类型(argv)
因此,您正在尝试从列表到元组的转换,这仅在元组中的元素数与列表长度完全匹配时有效:

>>> a,b,c = [1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> a,b,c = [1,2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
>>> a,b,c = [1,2,3]
>>> a,b,c = [1,2,3,4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>a,b,c=[1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包
>>>a,b,c=[1,2]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要2个以上的值才能解包
>>>a,b,c=[1,2,3]
>>>a,b,c=[1,2,3,4]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:要解压缩的值太多

因此,在尝试转换之前,您需要对
argv
长度添加一些检查。

我链接到的重复项不仅与您遇到的问题相同,而且与同一教程中的练习相同。另外,请注意,许多Python程序员不建议以艰苦的方式学习Python。它有,而且有很多选择。如果你不想切换,至少要记住还有其他教程,所以如果LPtHW中的一个概念没有意义,你可以阅读其他解释,看看它们是否对你更有意义。我链接的副本不仅是你遇到的同一个问题,而且是同一教程中的同一个练习。顺便说一句,请注意,许多Python程序员不建议以艰苦的方式学习Python。它有,而且有很多选择。如果您不想切换,至少要记住还有其他教程,因此如果LPtHW中的概念没有意义,您可以阅读其他解释,看看它们是否对您更有意义。