我的代码:
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
我想知道代码有什么问题......
答案 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']