现在我已经想出了How do I strtotime in python?我想知道是否有一种更优雅的方式来处理空日期的条目,如果我尝试strptime()它们会返回错误。
warrant_issued = cells[4].get_text().strip()
try:
warrant_issued_no = datetime.strptime(warrant_issued, '%m/%d/%Y')
except:
warrant_issued_no = ''
这可行,但我在每行解析四到五个日期,它似乎既冗长又重复。我想我应该定义一个函数,但还有其他方法可以让它更加pythonic吗?
为简洁起见,我在一开始就from datetime import datetime
,datetime.strptime()
正常工作。否则我需要datetime.datetime.strptime()
答案 0 :(得分:1)
我认为定义一个函数并只捕获你知道如何处理的异常正是这样做的方法。
def parse_datetime(warrant_issued):
try:
warrant_issued_no = datetime.strptime(warrant_issued, '%m/%d/%Y')
except ValueError:
warrant_issued_no = ''
warrants_issued = [ parse_datetime(cell.get_text().strip()) for cell in cells ]
答案 1 :(得分:0)
我认为你可能会做一些与 @mgilson 所说的类似的东西,但使用if
语句而不是try/catch
,因为你可能会意外地发现错误你不是故意的。
我的理解是,您希望在此处捕获的错误是日期字段为空白时,这就是我要使用的内容。
def parse_datetime(warrant_issued):
# Using Python's "truthiness" to take care of both '' and None, however it comes out
if warrant_issued:
warrant_issued_no = datetime.strptime(warrant_issued, '%m/%d/%Y')
else:
warrant_issued_no = ''
warrants_issued = [parse_datetime(cell.get_text().strip()) for cell in cells]
这样一来,如果你最终得到的一些其他错误仍然会引发ValueError
,但不是来自那里没有约会,它会抛出一个例外,你就可以照顾到它