1

これは少しばかげているように思えます:は月名の繰り返しdatetime.strptime()リストを手で作成するだけで喜んで受け入れます(months = ['January','February']calendar.month_name<type 'str'>

壊れたコード:

import datetime
import calendar
for month in calendar.month_name:
    print datetime.datetime.strptime(month,"%B")

エラー: ValueError: time data '' does not match format '%B'

作業コード:

import datetime
months = ['January','February','March']
for month in months:
    print datetime.datetime.strptime(month,"%B")

結果:

1900-01-01 00:00:00
1900-02-01 00:00:00
1900-03-01 00:00:00

何が起きてる?forこれは、私がよく知らないpython のループの動作ですか?

4

2 に答える 2

4

やってみるprint( list(calendar.month_name) )と、これが失敗する理由がすぐに明らかになります... (主に、生成された最初の要素が空の文字列であるため)。生成された最初の月が空の文字列である理由は、共通の規則month_names[1]に対応したいためであることに注意してください (ドキュメントを参照してください) 。January

次のようなことができます。

a = list( calendar.month_names )[1:]

または、これは少なくともCpythonでも機能します(ただし、ドキュメントでは明確ではありません):

a = calendar.month_names[1:]
于 2012-07-26T18:21:59.577 に答える
1

mgilsonが指摘したように、返される最初の項目は空の文字列です。それを無視するのは簡単です:

for month in calendar.month_name:
    if month:
        print datetime.datetime.strptime(month,"%B")

または、リスト内包表記を使用してそれを削除するには:

for month in [month_name for month_name in calendar.month_name if month_name]:
    print datetime.datetime.strptime(month,"%B")
于 2012-07-26T18:33:54.550 に答える