簡體   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