我对以前可以使用的某些代码感到困惑(昨天)。使用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()
这没什么大不了的,因为它可以工作,但是代码看起来丑陋,引起了我的好奇心。那么,关于此操作为何将停止工作的任何建议?以及如何解决?谢谢
根据评论,导入声明
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
。)
顺便说一句,一些专家建议不要使用
from module import function
而是总是只导入模块:
import module # or
import module as foo
尽管这可能是一种风格选择,但是遵守此规则可以使一切都从何而来变得非常清楚。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句