argparse错误“接受0个位置参数,但给出了2个”

时间:2019-08-15 17:32:04

标签: python argparse

我想实现一个解析器,如果用户愿意,它可以更改父目录。如果不需要,我希望程序将“桌面”用作默认目录。现在,用户每次运行程序时都被要求更改目录。

按照我的主管的示例,如果 name ==' main ',我将argparse放入其中。我想这是导致此错误的原因,但是我不知道该怎么办。

desktop = os.path.join(os.path.join(os.path.expanduser('~')), 'Desktop')
parent_dir = desktop
if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--setparentdir',
                        default=desktop,
                        help='sets the parent directory')
    args = parser.parse_args()
    if args.setparentdir:
        parent_dir = input('Enter your directory')
Enter your directory
Traceback (most recent call last):
  File "export_with_parser.py", line 129, in <module>
    download_contents(project_id, project_name)
TypeError: download_contents() takes 0 positional arguments but 2 were given

如果用户未输入--setparentdir,则程序应使用默认目录,即桌面。

1 个答案:

答案 0 :(得分:1)

根据您的描述,您不希望--setparentdir实际设置父目录。相反,您希望它确定是否将使用input。换句话说,args.setparentdir应该是一个布尔值。布尔值通常由store_truestore_false操作控制。由于--setparentdir没有直接设置父目录,因此其默认值不应为desktop,而应为False,其默认值为store_true

所以:

if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--setparentdir',
                        action='store_true',
                        help='Set the parent directory interactively')
    args = parser.parse_args()
    if args.setparentdir:
        parent_dir = input('Enter your directory')