我目前正在阅读“学习Python的艰难之路”。我想这个例子可能已经过时了,所以我想在这里得到反馈。
我正在使用Python 3.1
from sys import argv
script, first, second, third = argv
print("the script is called:", (script))
print("your first variable is:", (first))
print("your second variable is:", (second))
print("your third variable is:", (third))
我收到了这个错误:
Traceback (most recent call last):
File "/path/ch13.py", line 3, in <module>
script, first, second, third, bacon = argv
ValueError: need more than 1 value to unpack
知道什么是错的吗?
答案 0 :(得分:9)
答案 1 :(得分:4)
为了传递参数,您需要以这种方式运行脚本:
python fileName.py argument1 argument2
根据您拥有的变量数量= argv
,这是您需要减去第一个参数(脚本)的数量。如,
script, first, second, third = argv
应该有3个参数。
答案 2 :(得分:3)
sys.arg
是命令行参数列表。您需要实际将命令行参数传递给脚本以填充此列表。可以在IDE的项目设置中执行此操作,也可以在命令行上执行此操作:
python script.py first second third
请注意,第一个参数始终是脚本的名称(在本例中为python script.py
)。由于您使用了解包,每当您传递少于或多于3个参数时,您将获得ValueError
。您可以在使用len(argv)-1
解压缩之前检查号码,如果不是3,则会显示相应的错误。
在相关的说明中,如果您需要进行更复杂的参数传递,请查看getopt
。
答案 3 :(得分:0)
您正尝试将argv
解压缩为单独的值。解包需要,确切的值与要解压缩的值的大小相匹配。考虑一下:
a, b, c = [1, 2, 3]
工作正常,但是这个:
a, b, c, d, e = [1]
会给你一个丑陋的错误,就是你刚刚制作的那个。以您的方式解压缩sys.argv特别糟糕,因为它是用户输入,而您不知道脚本用户将提供多少个参数。所以你应该更仔细地打开包装:
if len(argv) == 5:
script_name, a, b, c, d = argv
else:
print "This script needs exactly four arguments, aborting"
exit()
答案 4 :(得分:0)
打开脚本时,您只需键入三个内容即可。例如,运行python(然后运行你的filename.py)1 2 3.“1,2和3”可以替换为任意三个数字或单词。
答案 5 :(得分:0)
要在命令行上运行此脚本,您需要使用三个参数。 您必须输入类似于以下内容的内容:
python /path/ch13.py first second third
答案 6 :(得分:0)
执行如下代码:
python ch13.py first second third
答案 7 :(得分:0)
from sys import argv
a, b, c, d = argv
print "The script is called:", a
print "Your first variable is:", b
print "Your second variable is:", c
print "Your third variable is:", d
将此脚本另存为:s.py
答案 8 :(得分:0)
你可以做到
(script, first, second, third) = argv
并传递3个参数
python filename arg1 arg2 arg3
从命令行运行它时。
我正在使用Python 3.6.0。在我没有将argv
参数包装在大括号中之前。但现在它有效。
答案 9 :(得分:0)
我认为该示例将为您提供帮助。您可以传递所需的参数数量,即参数数量是可变的。 :D
def main(*args):
print("Arguments Passed: ", args)
if __name__ == '__main__':
name_Script, *script_args = sys.argv
print("Name of the script: ", name_Script)
main(*script_args) #Send list of arguments
答案 10 :(得分:0)
这是另一种写法:
*script_args = sys.argv