2013-02-12 132 views
0

从模块中的第4行解压太多值。学习python硬盘练习17

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 

我用尽两个解决方案,并在运行脚本得到一个无效的错误的语法时才

+0

进口什么argv'的'的价值,你是如何运行脚本? – millimoose 2013-02-12 19:08:45

+1

如果有疑问,只需在发生错误的行之前快速执行'print argv'或'print​​',并且大部分时间您都可以轻松发现问题所在。 – Krachtwerk 2013-02-12 19:19:24

+0

刚刚尝试过,仍然得到相同的错误。 – Battle 2013-02-12 19:25:54

回答

2

,你需要提供两个命令行参数。假设脚本是test.py的名称,你需要运行它

python test.py fromfile.txt tofile.txt 

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

+0

给我一个无效的语法错误 – Battle 2013-02-12 19:26:46

+0

你如何运行你发布的脚本?从命令行或从一些文本编辑器内?我的解决方案假定您从命令行运行,否则您需要在编辑器中找到“脚本参数”选项。 – mbatchkarov 2013-02-12 19:33:26

1

在Python中,你可以解开值这样

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

,你会得到v1v2v3串一次一个。

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

因此,如果argvs没有足够的值解包(右侧的数字与左侧的数字不匹配),您将得到太多的解包。

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


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

+0

感谢您尝试目前实现此逻辑。 – Battle 2013-02-12 19:27:49

+0

现在我越来越无法导入名称存在 – Battle 2013-02-12 19:38:13

+0

@ user2065893看到我的评论和编辑。你写'退出'不'存在'。在单词的末尾加上's'即可。你应该没问题。 – CppLearner 2013-02-12 19:42:10

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

+0

我在哪里添加错误检查行? – Battle 2013-02-12 19:43:25