我有一个函数可以将字符串日期转换为列表列表中值的日期时间。并非所有值都是字符串日期,因此我使用的是try
和except ValueError
函数。对于不是字符串日期的东西,我想什么都不做,但代码用None
覆盖了值。
import datetime
def parse_date(datestamp):
try:
return datetime.datetime.strptime(str(datestamp)[:10], '%Y-%m-%d')
except ValueError:
pass
My_List = [['ID1', '2015-1-12'], ['ID2', '2015-12-12']]
My_List = [[parse_date(x) for x in i] for i in My_List]
print My_List
期望的输出:
[[ID1, datetime.datetime(2015, 1, 12, 0, 0)], [ID2, datetime.datetime(2015, 12, 12, 0, 0)]]
答案 0 :(得分:5)
这是因为parse_date()
在到达函数末尾时返回None,并且您将元素设置为此值。相反,返回值不变:
def parse_date(datestamp):
try:
return datetime.datetime.strptime(str(datestamp)[:10], '%Y-%m-%d')
except ValueError:
return datestamp
答案 1 :(得分:1)
您需要在提出datestamp
后返回ValueError
,如果None
加注,您的函数将返回ValueError
:
>>> def parse_date(datestamp):
... try:
... return datetime.datetime.strptime(str(datestamp)[:10], '%Y-%m-%d')
... except ValueError:
... return datestamp
...
>>> My_List = [['ID1', '2015-1-12'], ['ID2', '2015-12-12']]
>>> My_List = [[parse_date(x) for x in i] for i in My_List]
>>> print My_List
[['ID1', datetime.datetime(2015, 1, 12, 0, 0)], ['ID2', datetime.datetime(2015, 12, 12, 0, 0)]]