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循环行为吗?
尝试这样做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)