首页 > 解决方案 > 为什么即使我写得正确,argparse 也不起作用并发送无效选项错误消息?

问题描述

当我正确使用 argparse 时出现无效的选项字符串错误(来自 python 教育网站的示例文件)。

我尝试更改输入和输出文件的路径以及路径中的 \ -> / 或 \ 等符号

原始代码是

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 '-'

标签: pythonpycharmargparse

解决方案


for 的第二个位置参数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


推荐阅读