Python 2.7 python:argparse在组合位置参数和可选参数时抛出值错误

Python 2.7 python:argparse在组合位置参数和可选参数时抛出值错误,python-2.7,exception,argparse,Python 2.7,Exception,Argparse,我试图使用python中的argparse库来读取可选的和必需的参数。到目前为止,我正在这样做: import argparse parser = argparse.ArgumentParser(description='Cleanup Script for Folder') parser.add_argument('PATH_TO_WORKDIR_ROOT', type=str, dest='PATH_TO_WORKDIR_ROOT', action='store', help='(abso

我试图使用python中的argparse库来读取可选的和必需的参数。到目前为止,我正在这样做:

import argparse
parser = argparse.ArgumentParser(description='Cleanup Script for Folder')

parser.add_argument('PATH_TO_WORKDIR_ROOT', type=str, dest='PATH_TO_WORKDIR_ROOT', action='store', help='(absolute or) relative path to directory \n   to work on, e.g. "..\MyFolder\\"')
parser.add_argument('--PATH_TO_BACKUP_ROOT', type=str, dest='PATH_TO_BACKUP_ROOT', action='store', help='(absolute or) relative path to Backup-Directory \n   default is ".\BACKUP\"')

args = parser.parse_args()
现在我正在测试我的代码,它给了我一个我不理解的值错误:

$ python argparsetest.py --help
Traceback (most recent call last):  
File "argparsetest.py", line 5, in <module>
    parser.add_argument('PATH_TO_WORKDIR_ROOT', type=str, dest='PATH_TO_WORKDIR_ ROOT', action='store', help='(absolute or)
relative path to directory \n   to wo rk on, e.g. "..\MyFolder\\"')  
File "C:\Program
Files\Enthought\Canopy\App\appdata\canopy-1.3.0.1715.win-x86_
64\lib\argparse.py", line 1262, in add_argument
    raise ValueError('dest supplied twice for positional argument') ValueError: dest supplied twice for positional argument
$python argparsetest.py——帮助
回溯(最近一次呼叫最后一次):
文件“argparsetest.py”,第5行,在
parser.add_参数('PATH_TO_WORKDIR_ROOT',type=str,dest='PATH_TO_WORKDIR_ROOT',action='store',help='(绝对或)
工作所在目录\n的相对路径,例如“.\MyFolder\\”)
文件“C:\Program
文件\enthund\Canopy\App\appdata\Canopy-1.3.0.1715.win-x86_
64\lib\argparse.py”,第1262行,在add_参数中
raise VALUERROR(“为位置参数提供了两次dest”)VALUERROR:为位置参数提供了两次dest
只有一个位置参数,不是吗?目的地也不同。我真的不明白这件麻烦事:)


提前多谢

查看argparse.py中的以下代码:

# =======================
# Adding argument actions
# =======================
def add_argument(self, *args, **kwargs):
    """
    add_argument(dest, ..., name=value, ...)
    add_argument(option_string, option_string, ..., name=value, ...)
    """

    # if no positional args are supplied or only one is supplied and
    # it doesn't look like an option string, parse a positional
    # argument
    chars = self.prefix_chars
    if not args or len(args) == 1 and args[0][0] not in chars:
        if args and 'dest' in kwargs:
            raise ValueError('dest supplied twice for positional argument')
        kwargs = self._get_positional_kwargs(*args, **kwargs)

由于您没有将
--
放在PATH\u to\u WORKDIR\u ROOT之前,它认为第一个参数是
dest
,因此当您再次将
dest
作为命名参数提供时,会引发错误。

尝试将
--
添加到
PATH\u to\u WORKDIR\u ROOT
类似于
--PATH\u to\u WORKDIR u\u ROOT
错误完全在范围之内第一个
add_参数
方法。第一个字符串是
dest
,不允许使用关键字参数再次定义它。谢谢你的回答,这很有帮助!