以艰难方式学习Python 第17练习

-1 投票
3 回答
585 浏览
提问于 2025-04-17 15:39

在模块的第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

我尝试了两种解决方案,但都出现了无效的语法错误。

3 个回答

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

另外,或者说用更符合Python风格的方式:

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

注意从系统模块中导入exit这个功能。

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。不过这不应该引发语法错误。

2

当你运行这个脚本的时候,需要提供两个命令行参数。假设这个脚本的名字是 test.py,你需要这样运行它:

python test.py fromfile.txt tofile.txt

这样一来,你的变量 script 就会等于 "test.py",from_file 就会等于 "fromfile.txt",而 to_file 则会等于 "tofile.txt"。

撰写回答