我有一个名为pubdate
的变量,它来自rss feed。大部分时间它都是我想要的时间元组,所以没有错误。
有时它是一个unicode字符串,它会让人烦恼。
到目前为止,当它是一个unicode字符串时,我有以下代码pubdate
:
if isinstance(pubdate, unicode):
try:
pubdate = time.mktime(datetime.strptime(pubdate, '%d/%m/%Y %H:%M:%S').timetuple()) # turn the string into a unix timestamp
except ValueError:
pubdate = re.sub(r'\w+,\s*', '', pubdate) # removes day words from string, i.e 'Mon', 'Tue', etc.
pubdate = time.mktime(datetime.strptime(pubdate, '%d %b %Y %H:%M:%S').timetuple()) # turn the string into a unix timestamp
但我的问题是,如果unicode字符串pubdate
的格式与except ValueError
子句中的格式不同,则会引发另一个ValueError
,这是pythonic方式处理多个ValueError
个案件?
答案 0 :(得分:4)
当您从Rss解析日期字符串时。也许你在解析日期字符串时需要一些猜测。我建议您使用dateutil代替datetime模块。
dateutil.parser
提供了一个通用日期/时间字符串解析器,它能够解析大多数已知格式以表示日期和/或时间。
此函数的原型是:parse(timestr)
(您不必自己指定格式)。
<强>样本强>
>>> parse("2003-09-25T10:49:41")
datetime.datetime(2003, 9, 25, 10, 49, 41)
>>> parse("2003-09-25T10:49")
datetime.datetime(2003, 9, 25, 10, 49)
>>> parse("2003-09-25T10")
datetime.datetime(2003, 9, 25, 10, 0)
>>> parse("2003-09-25")
datetime.datetime(2003, 9, 25, 0, 0)
>>> parse("Sep 03", default=DEFAULT)
datetime.datetime(2003, 9, 3, 0, 0)
模糊解析:
>>> s = "Today is 25 of September of 2003, exactly " \
... "at 10:49:41 with timezone -03:00."
>>> parse(s, fuzzy=True)
datetime.datetime(2003, 9, 25, 10, 49, 41,
tzinfo=tzoffset(None, -10800))
答案 1 :(得分:1)
您可以采取以下方法:
jtaTransactionManagerMock.rollback()
输出为:
from datetime import datetime
import time
pub_dates = ['2/5/2013 12:23:34', 'Monday 2 Jan 2013 12:23:34', 'mon 2 Jan 2013 12:23:34', '10/14/2015 11:11', '10 2015']
for pub_date in pub_dates:
pubdate = 0 # value if all conversion attempts fail
for format in ['%d/%m/%Y %H:%M:%S', '%d %b %Y %H:%M:%S', '%a %d %b %Y %H:%M:%S', '%A %d %b %Y %H:%M:%S', '%m/%d/%Y %H:%M']:
try:
pubdate = time.mktime(datetime.strptime(pub_date, format).timetuple()) # turn the string into a unix timestamp
break
except ValueError as e:
pass
print '{:<12} {}'.format(pubdate, pub_date)