I have a function to covert string dates to date times for values in a list of list. Not all values are string dates so I am using a try and except ValueError function. For things that are not string dates, I would like to just do nothing, but the code is overwriting the values with 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
Desired Output:
[[ID1, datetime.datetime(2015, 1, 12, 0, 0)], [ID2, datetime.datetime(2015, 12, 12, 0, 0)]]
It's because parse_date() is returning None when it gets to the end of the function, and you are setting your elements to this value. Instead, return the value unchanged:
def parse_date(datestamp):
try:
return datetime.datetime.strptime(str(datestamp)[:10], '%Y-%m-%d')
except ValueError:
return datestamp
You need to return datestamp after raising ValueError , your function return None if ValueError raise :
>>> 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)]]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With