6

我目前正在学习 Python The Hard Way。我认为这个例子可能已经过时了,所以我想在这里得到反馈。

我正在使用 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

知道有什么问题吗?

4

11 回答 11

9

您忘记将参数传递给脚本,例如foo.py bar baz quux.

在此处输入图像描述

于 2011-01-21T23:55:53.727 回答
4

为了传递参数,您需要以这种方式运行脚本:

python fileName.py argument1 argument2

根据您有多少个变量 = to argv,这是您需要减去第一个参数(脚本)的数量。例如,

 script, first, second, third = argv

应该有 3 个参数。

于 2011-11-30T05:01:20.607 回答
3

sys.arg是命令行参数的列表。您需要将命令行参数实际传递给脚本以填充此列表。在 IDE 的项目设置中执行此操作,或者在命令行上像这样运行:

python script.py first second third

请注意,第一个参数始终是脚本的名称(python script.py在这种情况下)。由于您使用解包,ValueError每当您传递少于或多于 3 个参数时,您都会得到一个。如果不是 3,您可以在打开包装之前使用len(argv)-1并显示合适的错误来检查数字。

在相关说明中,查看getopt是否需要进行更复杂的参数传递。

于 2011-01-21T23:59:11.043 回答
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()
于 2012-10-02T08:01:45.633 回答
0

为了在命令行上运行这个脚本,你需要使用三个参数。您将必须输入类似于以下内容的内容:

python /path/ch13.py first second third
于 2014-09-05T01:23:26.203 回答
0

您所要做的就是在打开脚本时键入任意三件事。例如,运行 python (然后是你的 filename.py) 1 2 3。“1、2 和 3”可以替换为任意三个数字或单词。

于 2014-04-09T00:24:21.997 回答
0

像这样执行代码:

python ch13.py first second third
于 2016-07-04T15:11:19.803 回答
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
于 2018-07-07T02:20:11.427 回答
0

你可以做

(script, first, second, third) = argv 

并传递 3 个参数

python filename arg1 arg2 arg3

当你从命令行运行它时。

我正在使用 Python 3.6.0。在我没有将argv参数包装在大括号中之前。但现在它起作用了。

你可以在这里查看

于 2017-05-31T14:40:10.997 回答
0

这是另一种写法:

*script_args = sys.argv
于 2021-08-08T00:10:28.500 回答
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

从终端运行此脚本,如下所示: 在此处输入图像描述

于 2016-07-29T10:04:03.153 回答