试图让它在 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
分解为script
并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'
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 我的姓名