2

试图让它在 Pyscripter 中运行,并得到以下错误:

ValueError: need more than 1 value to unpack

我对使用 Python 和 Pyscripter 编码很陌生,所以如果你能解释为什么你的答案有效,那就太好了。谢谢

from sys import argv

script, user_name = argv
prompt = '>'

print "Hi %s, I'm the %s script." %(user_name, script)
print "I'd like to ask you a few questions."
print "Do you like me %s?" %user_name
likes = raw_input(prompt)

print "Where do you live %s?" %user_name
lives = raw_input(prompt)

print "What kind of computer do you have?"
computer = raw_input(prompt)

print """
Alright, so you said %r about liking me.
You live in %r. Not sure where that is.
And you have a %r computer. Nice.
""" %(likes, lives, computer)
4

3 回答 3

3

在这段代码中:script, user_name = argvargv”是命令行参数。如果它少于两个参数,则会出现该错误,因为 python 无法分解argvscriptand user_name

因此,您应该在调用脚本时处理此错误情况和/或提供更多参数。

您可以在交互式 python 提示符处重现此问题,如下所示:

>>> from sys import argv
>>> argv
['']
>>> a, b = argv
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> argv_new = ['some', 'argument', 'list',]
>>> a, b = argv_new
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> a, b, c = argv_new
>>> a
'some'
>>> b
'argument'
>>> c
'list'
于 2014-12-22T19:27:48.330 回答
0

argv已经是 alist所以如果你在命令行上提供了错误数量的参数,你就不能像你在这里尝试做的那样解压它。看来这就是你在这里所做的,因此你得到了错误。

假设您的目标是提取脚本和第一个参数,只有您可以这样做:

from sys import argv

script = argv[0]
user_name = argv[1]

请注意,脚本的名称存储为列表的第一个元素,然后找到所有其他参数。如果您有多个命令行参数,这将起作用。

如果您想确保只有一个参数,那么您可以使用 . 检查argv列表的长度len(sys.argv)

from sys import argv

if len(argv) == 2:
    script = argv[0]
    user_name = argv[1]
else:
    print("Bad number of arguments supplied on command line")
    exit()

但是,如果我们正在测试我们是否拥有正确数量的命令行参数,我们就可以安全地使用如下解包语法:

if len(argv) == 2:
    script, user_name = argv #works because argv is the correct length
else:
    print("Bad number of arguments supplied on command line")
    exit()

然而,更高级的方法是使用Argparse,因此当您更熟悉 Python 时,您可能想研究一下。

于 2014-12-22T19:34:05.550 回答
0

问题是您没有将所需的参数传递给 argv。从 pydoc 系统:

argv -- 命令行参数;argv[0] 是脚本路径名(如果已知)

根据 learnpythonthehardway.org,此示例代码来自.. 当您运行此程序时,请记住您必须为脚本提供您的 argv 参数名称。

IE:

./ex14.py 我的名字

于 2015-09-29T10:45:38.657 回答