Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Try, Except ValueError replaces with None

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)]]
like image 214
user2242044 Avatar asked Feb 26 '26 10:02

user2242044


2 Answers

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
like image 103
Adam Hughes Avatar answered Feb 28 '26 23:02

Adam Hughes


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)]]
like image 21
Mazdak Avatar answered Feb 28 '26 22:02

Mazdak



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!