获取太多值以从模块中的第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
我已经尝试了两种解决方案并获得了无效的sytax错误
答案 0 :(得分:2)
运行脚本时,需要提供两个命令行参数。假设脚本的名称为test.py
,则需要将其作为
python test.py fromfile.txt tofile.txt
然后您的变量script
将等于“test.py”,from_file
将等于“fromfile.txt”,to_file
将等于“tofile.txt”。
答案 1 :(得分: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
。但这不应该触发语法错误。
答案 2 :(得分: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
退出的导入