ValueError太多值无法解压缩

时间:2017-07-01 13:24:08

标签: python powershell

我的代码:

from sys import argv
pl_magic, pl_pet = argv
pl_enemy = raw_input("The second enchanter:")
print "The most powerful enchanter is",pl_magic
print pl_pet,"is the pet of",pl_magic
print "They hate %s" %pl_enemy

powershell输出:

PS D:\FILE\LPHW> python ex13b.py 1 2 3
Traceback (most recent call last):
  File "ex13b.py", line 2, in <module>
    pl_magic, pl_pet = argv
ValueError: too many values to unpack

我想知道代码有什么问题......

2 个答案:

答案 0 :(得分:0)

Argv数组不仅包含命令行参数,还包含正在运行的脚本的名称

argv[0] = "ex13b.py"

另外,通过写作

pl_magic, pl_pet = argv

你期望argv只包含2个值,而在命令行参数中你给出3个参数。这使得argv总共包含4个值,因为第一个值始终是脚本名称。

您的代码应如下所示:

script_name, pl_magic, pl_pet, third_argument = argv

话虽这么说,你不应该只是试图盲目解开东西,但也要加上一些支票,例如:

args_count = len(argv) - 1
if args_count < 3:
    #do something if not enough arguments provided

答案 1 :(得分:0)

当你这样做时:

pl_magic, pl_pet = argv

并输入参数(请记住,您应该在sys.argv中考虑文件名):

ex13b.py 1 2 3

您实际运行以下行:

pl_magic, pl_pet = ['ex13b.py', '1', '2', '3']

将值解压缩到变量中时,需要相同数量的变量和值。这就是您的代码不起作用的原因。

您可以使用:

_, par1, par2, par3 = sys.argv

在Python 3中,您还可以使用:

_, par1, *par2 = sys.argv

这将导致:

_ = 'ex13b.py'
par1 = '1'
par2 = ['2', '3']