尝试,除了 ValueError 替换为 None

Try, Except ValueError replaces with None

我有一个函数可以将字符串日期转换为列表列表中值的日期时间。并非所有值都是字符串日期,因此我使用了 tryexcept 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)]]

这是因为 parse_date() 在函数结束时 returning None,并且您正在将元素设置为此值。相反,return 值不变:

def parse_date(datestamp):
      try:
          return datetime.datetime.strptime(str(datestamp)[:10], '%Y-%m-%d')
      except ValueError:
          return datestamp

你需要 return datestamp 在加注 ValueError 之后,你的函数 return None if 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)]]