Python使用optpass指定日期格式
我刚开始使用Python 2.6 我想和Optargs讨论一个日期 当尝试这样做时: 我得到这个错误:Python使用optpass指定日期格式,python,Python,我刚开始使用Python 2.6 我想和Optargs讨论一个日期 当尝试这样做时: 我得到这个错误: 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) Fi
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>
(……)
你能帮帮我吗
谢谢大家! 如果您需要坚持使用python 2.6,下面是一个带有
optpasse
的实现:
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
有关更多详细信息,请参见如果您的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)
根据您引用的链接,他们正在使用
ArgumentParser
。既然不推荐使用optparse
,您应该使用argparse
,但是对于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
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)