我正在将我正在使用的Python转移到别人修改过的Python代码中。我收到错误。我知道datetime.datetime会导致问题,但我想我已经尝试了排列。在测试中,如果我在下面的行之前返回(),则没有运行时错误。我对帖子中的格式感到抱歉。我没有想好这个。
Python版本2.7.12
import os, sys, re, datetime
from datetime import datetime
#注意:评论“从datetime import datetime”不会更改生成的错误,所以我认为有些东西是从某个地方导入的。
这些是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'未定义”
答案 0 :(得分:1)
你说评论from datetime import datetime
不会改变错误,但事实并非如此,这是问题的原因。
timedelta
位于datetime
模块中。但是,由于您已完成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)