我对我以前工作的一些代码(昨天)感到困惑。使用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()
这不是什么大不了的事,因为它有效,但代码看起来很难看,我的好奇心被激怒了。 为什么这会停止工作的任何建议?以及如何解决? 感谢
答案 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
虽然这可能是一种风格选择,但遵守这一规则可以非常清楚一切来自何处。