Python datetime.strptime 默认值

4

有没有办法让datetime.strptime()在解析失败时给我一个默认值(None in this case)? 我有一个从文件中获取的用户输入数据,其中日期格式可能不正确。 日期应该是mm/dd/yy的形式,但有些人将它们放在了dd/mm/yy上。 所以文件可能看起来像这样:

user1 01/30/14
user2 02/19/12
user3 27/02/11

我不需要考虑格式错误的日期,所以我可以直接返回None。 我知道可以使用以下代码来实现:

try:
    return datetime.strptime(row[1], '%m/%d/%y')
except:
    return None

但我希望有更优雅的解决方案。这里有人知道解决方法吗?

提前感谢。


9
您目前的解决方案看起来非常优雅。不过,我建议捕获strptime引发的特定异常,而不是使用裸露的except:(会捕获所有异常)。 - user2555451
1
你在这里面临的更大问题是混合使用这两种日期格式会导致歧义 - 10/11/12 应该被解析为什么? - jonrsharpe
很遗憾,这不能在lambda内完成:\ - jtlz2
1个回答

2

datetime包没有提供内置的解决方案来解决您的问题。

一个更优雅(接近您的建议)的解决方案是定义自己的函数(例如,在您的utils.py文件或等效文件中)。

from datetime import datetime

def strptime(date_string, format, default=None):
    try:
        return datetime.strptime(date_string, format)
    except (ValueError, TypeError):
        return default

以下异常将被引发(您可能需要处理其他异常):
  • TypeError:在date_string不是str时引发(例如,如果传递了None)
  • ValueError:在date_string不匹配格式时引发
您可以导入您的strptime(例如从utils中)而不是datetime.datetime.strptime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接