无法使用日期时间导入日期时间的datetime.strptime

时间:2014-05-23 01:27:10

标签: python python-2.7

我对我以前工作的一些代码(昨天)感到困惑。使用python 2.7.6

我有

from datetime import datetime

openfor = (datetime.strptime(row[1],"%Y-%m-%d %H:%M:%S") - datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S")).total_seconds()

并返回所需的值。截至今天早上正在生成

AttributeError: 'module' object has no attribute 'strptime'

如果我使用下面的内容,无论是否有导入都可以。

openfor = (datetime.datetime.strptime(row[1],"%Y-%m-%d %H:%M:%S") - datetime.datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S")).total_seconds()

这不是什么大不了的事,因为它有效,但代码看起来很难看,我的好奇心被激怒了。 为什么这会停止工作的任何建议?以及如何解决? 感谢

1 个答案:

答案 0 :(得分:2)

根据评论,导入声明

from pylab import *

是问题的原因。这导入pylab pylab名称空间中的所有名称复制到当前模块的全局名称空间中。 datetime就是其中一个名字:

In [188]: import pylab

In [189]: 'datetime' in dir(pylab)
Out[189]: True

因此datetime被重新分配给模块而不是类。


介于

之间
from datetime import datetime

openfor = (datetime.strptime(row[1],"%Y-%m-%d %H:%M:%S") - datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S")).total_seconds()

datetime被重新定义为等于模块datetime而不是等级datetime.datetime。 此问题的原因在于您尚未发布的代码。 (但是导入语句import datetime可能是罪魁祸首。另外注意不要使用from module import *,因为这可能会污染调用模块的名称空间,并使用其他模块中的名称。包括datetime。)


顺便说一下,some experts recommend从不使用

from module import function

而是始终只导入模块:

import module         # or 
import module as foo

虽然这可能是一种风格选择,但遵守这一规则可以非常清楚一切来自何处。