strptime() 无法解析 calendar.month_name 的迭代

Mar*_*rch 1 python for-loop strptime

这里有一些看起来有点愚蠢的事情: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")
Run Code Online (Sandbox Code Playgroud)

错误: ValueError: time data '' does not match format '%B'

工作代码:

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

结果:

1900-01-01 00:00:00
1900-02-01 00:00:00
1900-03-01 00:00:00
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?for这是我不熟悉的python循环行为吗?

mgi*_*son 5

尝试这样做print( list(calendar.month_name) ),很快就会明白为什么失败......(主要是因为产生的第一个元素是一个空字符串)。请注意,第一个月产生的原因是空字符串,因为它们想要month_names[1]对应January于通用约定(请参阅文档

可以这样做:

a = list( calendar.month_names )[1:]
Run Code Online (Sandbox Code Playgroud)

或者这至少在 Cpython 中也有效(尽管文档中不清楚是否应该这样做):

a = calendar.month_names[1:]
Run Code Online (Sandbox Code Playgroud)