2

现在我已经弄清楚了如何在 python 中进行 strtotime?我想知道是否有更优雅的方法来处理带有空日期的条目,如果我尝试 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()

4

2 回答 2

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 ]
于 2012-11-25T17:13:51.473 回答
1

我认为你可能会做一些与@mgilson所说的类似的事情,但是用一个ifstatement 而不是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]

这样,如果你最终得到一些其他错误,但仍然抛出 aValueError但不是从那里没有日期,它会抛出一个异常,你将能够处理它。

于 2012-11-25T20:34:51.017 回答