Почему argparse не работает и не отправляет сообщение об ошибке неверной опции, даже если я написал правильно? - PullRequest
0 голосов
/ 22 мая 2019

Недопустимая ошибка строки опции, когда я правильно использую argparse (файл примера с сайта Python Education).

Я попытался изменить путь к файлу ввода и вывода и символы, такие как \ -> / или \ в пути

исходный код

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,
    help="path to input image")
ap.add_argument("-o", "--output", required=True,
    help="path to output image")
args = vars(ap.parse_args())

и я изменил аргумент --input и --output -> путь к файлам ввода и вывода.

ap = argparse.ArgumentParser()
ap.add_argument("-i", "C:\input_01.png", required=True,
    help="path to input image")
ap.add_argument("-o", "C:\output_011.png", required=True,
    help="path to output image")
args = vars(ap.parse_args())

и я получил это сообщение об ошибке.

Traceback (most recent call last):
  File "C:/Users/command-line-arguments/shape_counter.py", line 13, in 
<module>
    help="path to input image")
  File "C:\Users\huryo\Anaconda3\lib\argparse.py", line 1339, in add_argument
    kwargs = self._get_optional_kwargs(*args, **kwargs)
  File "C:\Users\huryo\Anaconda3\lib\argparse.py", line 1470, in _get_optional_kwargs
    raise ValueError(msg % args)
ValueError: invalid option string 'C:\\input_01.png': must start with a character '-'

1 Ответ

1 голос
/ 22 мая 2019

Второй позиционный аргумент для arg_parse.addargument() - это длинная версия имени, которое вы хотите использовать для ссылки на переменную, поэтому -i будет --input, вам нужно использовать аргумент default=..., если выхотите, чтобы он имел значение по умолчанию.Вы должны изменить свой код обратно на:

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,
    help="path to input image")
ap.add_argument("-o", "--output", required=True,
    help="path to output image")
args = vars(ap.parse_args())

или, если вы хотите использовать значение по умолчанию для -i и -o, вы можете использовать аргумент по умолчанию для argparser:

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", default="C:\input_01.png",
    help="path to input image")
ap.add_argument("-o", "--output", default="C:\output_011.png",
    help="path to output image")
args = vars(ap.parse_args())

и затем вызвать его из командной строки с аргументами командной строки:

python shape_counter.py -i C:\input_01.png -o C:\output_011.png

...