Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python导入argv错误_Python_Pyscripter - Fatal编程技术网

Python导入argv错误

Python导入argv错误,python,pyscripter,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)

试图在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
”是命令行args。如果少于两个参数,则会出现该错误,因为python无法将
argv
分解为
script
user\u 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的
>>
>>>argv
['']
>>>a,b=argv
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包
>>>argv_new=['some','argument','list',]
>>>a,b=argv_新
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:要解压缩的值太多
>>>a,b,c=argv_新
>>>a
“一些”
>>>b
“论点”
>>>c
“列表”

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

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

from sys import argv

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

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

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

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()

但是,更高级的方法是使用,这样当您对Python更熟悉时,您可能需要研究一下。

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

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

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

即:

./ex14.py我的名字


您可能希望使用
argparse
模块,而不是
sys.argv
。如何运行脚本?您应该使用一个参数来运行它。Argparse是一种更好的方法,可以精确地执行您想要执行的操作:并且,下次,提供完整的回溯。现在我们看到一个错误没有上下文引用。Argparse不适合OP试图达到的技能水平和目标。让我们专注于帮助他克服这个挑战。
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()