PYTHON3错误:无法识别的参数

时间:2014-12-16 00:47:25

标签: python argparse

我正在尝试使用argparse提供TXT文件,然后在函数中打开它。 你能告诉我它为什么说:错误:无法识别的参数:dataBase.txt (ps:dataBase是我试图打开的文件)

更新(1) 我的主要:

if __name__ =='__main__':   

    parser=argparse.ArgumentParser()
    parser.add_argument("file_name",type= argparse.FileType,help="name of file with network")

    args=parser.parse_args()
    z=args.file_name
    names,network= loadNetwork()

我职能的一小部分:

def loadNetwork(): 


    fileName=open('z', 'r')

    name = fileName.readlines()

2 个答案:

答案 0 :(得分:2)

我认为这是因为file不是Python3中argparse的有效类型。 type参数采用可调用方式,并且由于Python3中不存在file,因此会抛出错误。请尝试使用FileType

parser = argparse.ArgumentParser()
parser.add_argument("file_name", type=argparse.FileType("r"), help="name of file with network")

答案 1 :(得分:0)

粗略地说,我认为你的代码看起来如何:

def loadNetwork(afile): 
    name = afile.readlines()
    return name

if __name__ =='__main__':   
    parser=argparse.ArgumentParser()
    parser.add_argument("file",type= argparse.FileType('r'),
        help="name of file with network")

    # FileType opens the file you specified;
    # so you don't need to open it
    args = parser.parse_args()
    names,network = loadNetwork(args.file)
    args.file.close()

argparse设置的值作为参数传递给函数是一个好主意,而不是设置全局变量。

但是,如果您更愿意自己打开和关闭文件,我建议:

def loadNetwork(filename): 
    with open(filename) as f:
        name = f.readlines()
    return name

if __name__ =='__main__':   
    parser=argparse.ArgumentParser()
    parser.add_argument("filename", help="name of file with network")

    args = parser.parse_args()
    names,network = loadNetwork(args.filename)

with语句打开并关闭文件。如果文件名不有效,则argparse不会发出错误消息。但是with open会。此外,我也不接受'-'作为文件名(FileType将其视为sys.stdin)。