[英]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.