删除未使用的参数时,Python会出错

时间:2013-12-25 09:41:24

标签: python parameters

我正在学习python而且我遇到了麻烦。 这是我的剧本:

from sys import argv
script,filename = argv
txt = open(filename)
print txt.read()

这可行,但是当我删除脚本参数时,例如:

from sys import argv
filename = argv
txt = open(filename)
print txt.read()

它给出错误:

  

文件“ex3.py”,第4行,in       txt = open(filename)TypeError:强制转换为Unicode:需要字符串或缓冲区,列表找到

2 个答案:

答案 0 :(得分:4)

当您执行script, filename = argv时,您将script分配给argv的第一个元素,将filename分配给第二个元素。但是,当您执行filename = argv时,您将filename分配给整个事情。这意味着您将列表传递给open,这是Python不喜欢的。

如果您不需要使用script,则可以将其替换为单个下划线,如下所示:

_, filename = argv

正如@raymonad在下面的评论中所述,您也可以直接将filename分配给第二个元素,如下所示:

filename = argv[1]

答案 1 :(得分:4)

import sys
print type(sys.argv)  # <type 'list'>

实际上argv是一个列表,您试图将列表传递给open,它希望第一个参数是有效的字符串(文件名)。这就是它失败的原因。

如果您实际上不需要其他值,那么您只能提取第一个参数,例如

from sys import argv
txt = open(argv[1])
print txt.read()

另一个重要建议,如果您要处理文件,请使用with这样的语句

from sys import argv
with open(argv[1]) as txt:
    print txt.read()

这样您就不必担心明确关闭文件