我是使用Python 2.6的新手
我正在尝试用Optargs作为参数传递日期。
当试着这样做时: Specify format for input arguments argparse python 我收到这个错误:
parser.add_option('-e', '--end', help='end date - format YYYYMMDD', type=valid_date)
File "/usr/lib64/python2.6/optparse.py", line 1012, in add_option
option = self.option_class(*args, **kwargs)
File "/usr/lib64/python2.6/optparse.py", line 577, in __init__
checker(self)
File "/usr/lib64/python2.6/optparse.py", line 660, in _check_type
raise OptionError("invalid option type: %r" % self.type, self)
optparse.OptionError: option -e/--end: invalid option type: <function valid_date at 0x7f310294fde8>
我的程序是这样的:
parser.add_option('-e', '--end', help='end date - format YYYYMMDD', type=valid_date)
(...)
def valid_date(s):
try:
return datetime.datetime.strptime(s, "%Y%m%d")
except ValueError:
print("Not a valid date: '{0}'.".format(s))
你能帮我吗?
谢谢!
答案 0 :(得分:2)
如果你需要坚持使用python 2.6,这是一个optparse
的实现:
from optparse import Option, OptionValueError, OptionParser
from copy import copy
from datetime import datetime
# function to check/convert option value to datetime object
def valid_date(option, opt, value):
try:
return datetime.strptime(value,'%Y%m%d')
except ValueError:
raise OptionValueError( 'option %s: invalid date format: %r' % (opt, value))
# extend Option class with date type
class MyOption(Option):
TYPES = Option.TYPES + ('date',)
TYPE_CHECKER = copy(Option.TYPE_CHECKER)
TYPE_CHECKER['date'] = valid_date
# parse options
parser = OptionParser(option_class=MyOption)
parser.add_option( '-e', '--end', type='date' , help='end date - format YYYYMMDD')
(opts, args) = parser.parse_args()
# do something meaningful
print opts.end
有关详细信息,请参阅https://docs.python.org/2/library/optparse.html#adding-new-types
答案 1 :(得分:0)
如果您的python> = 2.7,则可以尝试argparse,
def valid_date(value):
return datetime.strptime(value,'%Y%m%d')
parser = argparse.ArgumentParser()
parser.add_argument('--end', dest='d', required=True, type=valid_date)