Argparse:无法识别的论点

use*_*048 0 python argparse

我试图将一些日期传递argparse给我的脚本,但不知何故它总是产生以下错误:

error: unrecognized arguments: -startdate -enddate -timeofday
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

import argparse

parser = argparse.ArgumentParser(description='This program downloads webcam images')
parser.add_argument('?startdate', type=str, help='startdate given as:dd.mm.YYYY')
parser.add_argument('?enddate', type=str, help='enddate given as:dd.mm.YYYY')
parser.add_argument('?timeofday', type=str, help='time of day as:"HH:MM"')
args = parser.parse_args()
print args.startdate
print args.enddate
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用连字符而不是点作为分隔符,以及"真正的"字符串而不是数字.什么都没有帮助.有任何想法吗?谢谢!

Mar*_*ers 7

您使用的是错误的字符:

>>> parser = argparse.ArgumentParser(description='This program downloads webcam images')
>>> parser.add_argument('?startdate', type=str, help='startdate given as:dd.mm.YYYY')
_StoreAction(option_strings=[], dest='\xe2\x80\x90startdate', nargs=None, const=None, default=None, type=<type 'str'>, choices=None, help='startdate given as:dd.mm.YYYY', metavar=None)
Run Code Online (Sandbox Code Playgroud)

注意dest那里的价值!这是U + 2010 HYPHEN的UTF-8 ; 改为使用ASCII -减号字符.因为字符串不是以字符串开头的parser.prefix_chars,所以它甚至不被识别为可选参数,而是被视为位置.结果,option_strings也是空的.帮助输出也告诉你:

>>> parser.print_help()
usage: [-h] ?startdate

This program downloads webcam images

positional arguments:
  ?startdate  startdate given as:dd.mm.YYYY

optional arguments:
  -h, --help    show this help message and exit
Run Code Online (Sandbox Code Playgroud)

这是一个位置(必需)参数.

一般来说,确保你没有使用文字处理器来编写代码; 很可能你的简单ASCII -短划线被编辑器替换为花哨的 ? HYPHEN字符(注意它是如何渲染得更短).此类编辑还将用更多样式版本替换引号和其他标点符号.

如果我使用常规的ASCII减去字符就可以正常工作:

>>> parser = argparse.ArgumentParser(description='This program downloads webcam images')
>>> parser.add_argument('-startdate', type=str, help='startdate given as:dd.mm.YYYY')
_StoreAction(option_strings=['-startdate'], dest='startdate', nargs=None, const=None, default=None, type=<type 'str'>, choices=None, help='startdate given as:dd.mm.YYYY', metavar=None)
>>> parser.print_help()
usage: [-h] [-startdate STARTDATE]

This program downloads webcam images

optional arguments:
  -h, --help            show this help message and exit
  -startdate STARTDATE  startdate given as:dd.mm.YYYY
Run Code Online (Sandbox Code Playgroud)