Python导入argv错误

时间:2014-12-22 19:24:03

标签: python pyscripter

尝试让它在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)

3 个答案:

答案 0 :(得分:3)

在此代码段中:script, user_name = argv," argv"是命令行args。如果它少于两个参数,则会出现该错误,因为python无法将argv分解为scriptuser_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'

答案 1 :(得分:0)

argv已经是list,因此如果您在命令行中提供了错误数量的参数,则无法像在此处尝试一样解压缩它。看来这就是你在这里所做的,因此你得到了错误。

说你的目标是只提取脚本和第一个参数:

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更熟悉时,可能需要研究一下。

答案 2 :(得分:0)

问题是您没有将所需的参数传递给argv。来自pydoc sys:

  

argv - 命令行参数; argv [0]是脚本路径名if   已知

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

IE:

  

./ ex14.py MyName