Argparse:无法识别的论点

时间:2014-06-16 17:32:19

标签: python argparse

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

error: unrecognized arguments: -startdate -enddate -timeofday

我的代码如下:

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

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

1 个答案:

答案 0 :(得分: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)

注意那里的dest值!这是U+2010 HYPHEN的UTF-8;请改用ASCII - minus character。因为字符串不以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

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

一般来说,确保您没有使用文字处理器来编写代码;很可能您的简单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