有没有更优雅的方法来处理这个刮刀中的空值?

时间:2012-11-25 17:09:48

标签: python datetime coding-style strptime pep

现在我已经想出了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 datetimedatetime.strptime()正常工作。否则我需要datetime.datetime.strptime()

2 个答案:

答案 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,但不是来自那里没有约会,它会抛出一个例外,你就可以照顾到它