0

从模块中的第 4 行获取太多值以解压。

script, from_file, to_file = argv  line.

练习 17 示例

 from sys import argv
 from os.path import exists

 script, from_file, to_file = argv 

我知道我在做一些愚蠢的事情。使用 python 版本 2.7.3

这是练习中的逐字复制和粘贴:

from sys import argv
from os.path import exist

script, from_file, to_file = argv

我已经尝试了这两种解决方案并得到了 Invalid sytax 错误

4

3 回答 3

2

运行脚本时,需要提供两个命令行参数。假设脚本的名称是test.py,您需要将其运行为

python test.py fromfile.txt tofile.txt

然后你的变量script将等于“test.py”, from_file将等于“fromfile.txt”,to_file将等于“tofile.txt”。

于 2013-02-12T19:10:01.507 回答
1

在python中,您可以像这样解压值

my_packed_values = ('v1', 'v2', 'v3')
v1, v2, v3 = my_packed_values
print v1
print v2
print v3

你会一次得到v1一个v2字符串v3

所以你可以解压三个值。如果你这样做v1, v2 = my_packed_values,你会得到那个错误。

所以如果argvs没有足够的值来解包(右边的数字和左边的数字不匹配),你会得到太多的解包。

这不是一个答案,但在写这个答案时@mbatchkarvo 已经指出了实际原因。


os.path.exists,没有os.path.exist。但这不应该触发语法错误。

于 2013-02-12T19:13:46.203 回答
0

我的建议总是在处理命令行参数时进行一些错误检查,例如。至少像这样简单的东西

from sys import argv,exit
if not len(argv)==3:
   print "argv is" , argv
   print "expected script fromfile tofile"
   exit()
script, from_file, to_file = argv

或者,或者更多的pythonesque:

from sys import argv,exit
try:
   script, from_file, to_file = argv
except:
   print "argv is" , argv
   print "expected script fromfile tofile"
   exit()

注意从 sys 导入 exit

于 2013-02-12T19:22:47.140 回答