2017-09-10 113 views
-1

我正在阅读由Zed A. Shaw学习的PYTHON THE HARD WAY。在第13章,我得到了下面的代码Python代码未运行

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) 

我尝试对Spyder的运行这一点,但错误occurs.I要粘贴的Spyder控制台的最后几行 ValueError: not enough values to unpack (expected 4, got 1)

请帮我找出问题, 谢谢。

+1

1.如果您遇到错误,您需要在这里发布。说你得到错误,然后不说他们是不是很有帮助。你如何运行脚本?你是否传递任何参数? – Carcigenicate

+0

请看看这个[argv](https://stackoverflow.com/questions/13263951/what-is-argv-and-what-does-it-do) – ABcDexter

回答

0

您正在收到的错误是因为您在运行该文件时未传递任何参数。 尝试运行文件时传递参数。一个例子

python foo.py 1, 2, 3 
4

您还没有任何命令行参数传递,当你运行该脚本,即使它预计3个参数。由于您试图从args中提取比它包含的更多的值,因此出现错误。

命令行参数是您提供给程序的数据。

python your_script_here.py 1 2 3 

1 2 3是正在传递的参数:就在你运行你的脚本传递一些假数据作为参数。

我的例子从this tutorial修改过。值得一读。

1
# your_code.py 
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) 

您可以运行这样说:

python your_code.py one two three 

所以,你得到:

The script is called: your_code.py 
Your first variable is: one 
Your second variable is: two 
Your third variable is : three 

问候

+1

你的代码和OP的区别是什么? –

+0

导入前有前导字母,我想它已经被纠正! – gretiere

0

在Python中,sys.argv是包含command-line参数传递列表到脚本。

因此,例如,您可以创建一个名为testingArguments.py的python文件,该文件将打印从command-line解析的参数。

该代码,这可能只是看起来像:

from sys import argv 
print(argv) 

然后在命令行,如果你运行该命令:

python testingArguments.py arg1 arg2 3 

那么它会打印出参数的list所以:

['testingArguments.py', 'arg1', 'arg2', '3'] 

你的代码做什么,得到这个list in以同样的方式,然后拆包就像你可以一list没有从sys.argv

a, b, c, d = [1, 2, 3, 4] 

现在a=1b=2c=3d=4

因此,希望您现在完全可以看到,您的代码只是打印出在命令行中传递的四个参数,这两个参数是脚本名称和3以上的更多参数。

error,你得到:

ValueError: not enough values to unpack (expected 4, got 1) 

是因为你没有在这些3额外的变量,因此sys.argv不能解压到4,因为它只有一个元素传递:脚本的名称。因此最后一位:(expected 4, got 1)

希望这会有所帮助!