【问题标题】:datetime.datetime.timedelta -- errors all permutationsdatetime.datetime.timedelta -- 错误所有排列
【发布时间】:2017-08-24 13:21:40
【问题描述】:

我正在将我的工作 Python 转移到其他人修改过的 Python 代码中。我得到错误。我知道 datetime.datetime 会导致问题,但我想我已经尝试了这些排列。在测试中,如果我在下面的行之前返回(),则没有运行时错误。我对帖子中的格式感到抱歉。我还没有弄清楚。

Python 版本 2.7.12

import os, sys, re, datetime
from datetime import datetime 

#NOTE:注释掉“从日期时间导入日期时间”不会改变生成的错误,所以我认为有些东西是从某个地方导入的。

这些是 3 个版本以及运行时产生的错误消息"

dt = dt - datetime.timedelta(hours=24.5) # decrement date a day or two

给出错误“类型对象'datetime.datetime'没有属性'timedelta'”

dt = dt - datetime.datetime.timedelta(hours=24.5) # ; also error:

给出错误“类型对象'datetime.datetime'没有属性'datetime'”

dt = dt - timedelta(hours=24.5) # ; also error:

给出错误“未定义全局名称'timedelta'”

【问题讨论】:

    标签: python python-2.7 datetime


    【解决方案1】:

    你说注释掉from datetime import datetime不会改变错误,但这不应该是这样,这是问题的原因。

    timedeltadatetime 模块中。但是,因为你已经完成了from datetime import datetime,所以你的命名空间中的名称datetime指的是datetime类,而不是模块,并且不能用于直接获取timedelta类的句柄。

    删除这一行,使datetime 引用模块,您应该能够以datetime.timedelta 访问它:

    >>> import datetime
    >>> dt = datetime.datetime.now()
    >>> dt
    datetime.datetime(2017, 8, 24, 15, 10, 34, 942209)
    >>> dt = dt - datetime.timedelta(hours=24.5)
    >>> dt
    datetime.datetime(2017, 8, 23, 14, 40, 34, 942209)
    

    在这里试试:https://repl.it/KYDN/0

    或者,您可以导入这两个类并直接引用它们:

    >>> from datetime import datetime, timedelta
    >>> dt = datetime.now()
    >>> dt
    datetime.datetime(2017, 8, 24, 15, 14, 46, 340878)
    >>> dt = dt - timedelta(hours=24.5)
    >>> dt
    datetime.datetime(2017, 8, 23, 14, 44, 46, 340878)
    

    【讨论】:

    • 谢谢。我选择了“替代”,为了进一步将我的代码与我添加的内容隔离开来,我在函数内部使用了“from datetime import datetime, timedelta”。我认为这会将我的函数与我将函数插入的代码隔离开来。我不知道这是否可行,但尝试一下很容易。我不是面向对象的。我不明白发生了什么,但我明白你为我提供了一个可行的解决方案!
    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 2014-01-09
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2019-08-04
    • 2020-10-12
    相关资源
    最近更新 更多