尝试,除非ValueError替换为None

时间:2015-01-19 20:02:38

标签: python python-2.7 list-comprehension

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

2 个答案:

答案 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)]]