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 = ''

これは機能しますが、各行で 4 つまたは 5 つの日付を解析していますが、冗長で繰り返しが多いようです。関数を定義する必要があると考えていますが、これをよりPythonicにする方法は他にありますか?

簡潔にするために、私はfrom datetime import datetime最初にやったのでうまくいきdatetime.strptime()ます。そうでなければ私は必要だろうdatetime.datetime.strptime()

4

2 に答える 2

1

@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されているが日付がないからではない他のエラーが発生した場合、例外がスローされ、それを処理することができます。

于 2012-11-25T20:34:51.017 に答える
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 に答える