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

Python 有没有更优雅的方法来处理这个刮板中的空值?,python,datetime,coding-style,strptime,pep,Python,Datetime,Coding Style,Strptime,Pep,现在我明白了,我想知道是否有一种更优雅的方法来处理日期为空的条目,如果我尝试使用strtime()来处理这些条目,就会返回一个错误 这是可行的,但我正在分析每行中的四五个日期,它似乎既冗长又重复。我想我应该定义一个函数,但是有没有其他方法可以让这个函数更像python 为简洁起见,我从datetime开始导入datetime,因此,datetime.strTime()起作用。否则我需要datetime.datetime.strtime()我认为定义一个函数并只捕获您知道如何处理的异常正是实现这一

现在我明白了,我想知道是否有一种更优雅的方法来处理日期为空的条目,如果我尝试使用strtime()来处理这些条目,就会返回一个错误

这是可行的,但我正在分析每行中的四五个日期,它似乎既冗长又重复。我想我应该定义一个函数,但是有没有其他方法可以让这个函数更像python


为简洁起见,我从datetime开始导入datetime,因此,
datetime.strTime()
起作用。否则我需要
datetime.datetime.strtime()

我认为定义一个函数并只捕获您知道如何处理的异常正是实现这一点的方法

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 ]

我认为定义一个函数并只捕获您知道如何处理的异常正是做到这一点的方法

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 ]

我认为你最好做一些类似于@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
,但不是因为没有日期,它将抛出一个异常,你将能够处理它。

我认为你最好做一些类似于@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
,但不是因为没有日期,它将抛出一个异常,您将能够处理它。

这有一个轻微的缺点,即所有无效的日期字符串都被“忽略”,而jdotjdot的解决方案只忽略空字符串。这可能是OP想要的,也可能不是OP想要的。@Bakuriu我实际上记录了异常,这样我就可以检查它们,确保没有遗漏需要捕获的日期。这有一个轻微的缺点,即所有无效的日期字符串都被“忽略”,而jdotjdot的解决方案只忽略空字符串。这可能是OP想要的,也可能不是。@Bakuriu我实际上记录了异常,这样我可以检查它们,确保我没有错过我需要捕捉的日期。