我正在尝试使用argparse
将参数转换为timedelta
对象。我的程序读取用户提供的字符串并将它们转换为各种datetime
对象以供以后使用。我无法filter_length
正确处理参数。我的代码:
import datetime
import time
import argparse
def mkdate(datestring):
return datetime.datetime.strptime(datestring, '%Y-%m-%d').date()
def mktime(timestring):
return datetime.datetime.strptime(timestring, '%I:%M%p').time()
def mkdelta(deltatuple):
return datetime.timedelta(deltatuple)
parser = argparse.ArgumentParser()
parser.add_argument('start_date', type=mkdate, nargs=1)
parser.add_argument('start_time', type=mktime, nargs=1, )
parser.add_argument('filter_length', type=mkdelta, nargs=1, default=datetime.timedelta(1))#default filter length is 1 day.
我运行程序,1
作为timedelta
值传递(我只希望它是一天):
> python program.py 2012-09-16 11:00am 1
但我收到以下错误:
>>> program.py: error: argument filter_length: invalid mkdelta value: '1'
我不明白为什么该值无效。如果我自己调用 mkdelta 函数,如下所示:
mkdelta(1)
print mkdelta(1)
它返回:
datetime.timedelta(1)
1 day, 0:00:00
这正是我正在寻找的价值。有人可以帮我弄清楚如何正确使用这种转换argparse
吗?