argparse .ArgumentParser поднять ArgumentError - PullRequest
1 голос
/ 22 марта 2019
conflict_handler(action, confl_optionals)
  File "/usr/local/lib/python3.6/argparse.py", line 1510, in _handle_conflict_error
    raise ArgumentError(action, message % conflict_string)
argparse.ArgumentError: argument -h/--height: conflicting option string: -h

Выше приведено сообщение об ошибке, вот мой код, Я не вижу ошибки:

# 1) Разобрать аргументы

parser = argparse.ArgumentParser(description="Description for my parser")
parser.add_argument("-v", "--velocity", action="store", required=True, help="The velocity of the object is required")
parser.add_argument("-a", "--angle", action="store", type=float, required=True, help="The angle of the object is required")
parser.add_argument("-h", "--height", required=False, default= 1.2, help="The height of the object is not required. Default is set to 1.2 meters" )

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Опция "-h" по умолчанию предопределена как опция "справки", которая печатает описание и список аргументов. Ваш пользовательский "-h --height" конфликтует с этим, вызывая ошибку.

Было бы неправильно перезаписать опцию «-h --help» по умолчанию, поскольку многие пользователи ожидают, что опция «-h» выведет справочное сообщение. (Поэтому на вашем месте я бы нашел другой способ назвать опцию.) Но вы можете проигнорировать ее, если вам действительно нужно, используя add_help параметр с конструктором. Как это:

parser = argparse.ArgumentParser(description="Description for my parser", add_help=False)

Если вы хотите сохранить опцию "--help", вам нужно добавить еще одну строку parser.add_argument("--help", action="help"). (Спасибо chepner )

0 голосов
/ 22 марта 2019

Поскольку ошибка предполагает, что вы используете имя параметра, которое конфликтует с другим.Особенно в этом случае опция -h.В lib argparse всегда есть опция -h для вывода справки скрипта, поэтому для высоты необходимо использовать параметр, отличный от -h, например -ht.

parser = argparse.ArgumentParser(description="Description for my parser")
parser.add_argument("-v", "--velocity", action="store", required=True, help="The velocity of the object is required")
parser.add_argument("-a", "--angle", action="store", type=float, required=True, help="The angle of the object is required")
parser.add_argument("-ht", "--height", required=False, default= 1.2, help="The height of the object is not required. Default is set to 1.2 meters" )
...