Python 导入参数错误



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

在这段代码中: script, user_name = argv 中,"argv "是命令行参数。 如果参数少于两个,则会出现该错误,因为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'

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

假设您的目标是提取脚本,并且只有您可以执行此操作的第一个参数:

from sys import argv
script = argv[0]
user_name = argv[1]

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

如果要确保只有一个参数,则可以使用 len(sys.argv) 检查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更熟悉时,你可能想研究一下。

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

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

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

即:

./ex14.py 我的姓名

相关内容

最新更新