首页 > 解决方案 > argparse 错误“采用 0 个位置参数,但给出了 2 个”

问题描述

如果用户愿意,我想实现一个可以更改父目录的解析器。如果这不是必需的,我希望程序使用 Desktop 作为默认目录。现在,每次运行程序时都会要求用户更改目录。

我按照主管的示例将 argparse 放入 if name == ' main ' 中。我想这导致了这个错误,但我不知道该怎么做。

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 程序应该使用默认目录,即桌面。

标签: pythonargparse

解决方案


根据您的描述,您不想--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')

推荐阅读