繁体   English   中英

ValueError太多值无法解包

[英]ValueError too many values to unpack

我的代码:

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

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

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

当您这样做时:

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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM