尝试,除非ValueError替换为None

use*_*044 3 python list-comprehension python-2.7

我有一个函数可以将字符串日期转换为列表列表中值的日期时间.并非所有值都是字符串日期,所以我使用的是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
Run Code Online (Sandbox Code Playgroud)

期望的输出:

[[ID1, datetime.datetime(2015, 1, 12, 0, 0)], [ID2, datetime.datetime(2015, 12, 12, 0, 0)]]
Run Code Online (Sandbox Code Playgroud)

Ada*_*hes 5

这是因为parse_date()当它到达函数的末尾时返回None,并且您将元素设置为此值.相反,返回值不变:

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