【问题标题】:Unable to use datetime.strptime with from datetime import datetime无法将 datetime.strptime 与 from datetime import datetime 一起使用
【发布时间】:2014-05-23 01:27:09
【问题描述】:

我对我以前工作的一些代码(昨天)有些困惑。使用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()

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

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    根据 cmets,导入语句

    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
    

    虽然这可能是一种风格选择,但遵守此规则可以非常清楚地了解所有内容的来源。

    【讨论】:

    • 感谢您的快速回复,其他导入如下import sqlite3 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from datetime import datetime from time import strftime from pylab import *
    • 最后一期; from pylab import * 包括 datetime(模块)。
    • 我会投票赞成你的答案,但还没有足够的声誉。也感谢您的风格提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2019-10-11
    • 2015-10-06
    • 2015-08-25
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多