Python使用optpass指定日期格式

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

我刚开始使用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)
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)