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