类型对象'datetime.datetime'没有属性'datetime'

Chr*_*ank 101 python django

我正在关注django教程,我遇到以下错误:

类型对象'datetime.datetime'没有属性'datetime'

在以下行:

date = datetime.datetime(int(year), int(month), 1)
Run Code Online (Sandbox Code Playgroud)

有人知道错误的原因吗?

from datetime import datetime如果有帮助,我导入了datetime

谢谢

Joh*_*yon 188

Datetime是一个允许处理日期,时间和日期时间的模块(所有这些都是数据类型).这意味着datetime它既是顶级模块,也是该模块中的类型.这令人困惑.

您的错误可能是基于模块的令人困惑的命名,以及您或您正在使用的模块已导入的内容.

>>> import datetime
>>> datetime
<module 'datetime' from '/usr/lib/python2.6/lib-dynload/datetime.so'>
>>> datetime.datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)

但是,如果您导入datetime.datetime:

>>> from datetime import datetime
>>> datetime
<type 'datetime.datetime'>
>>> datetime.datetime(2001,5,1) # You shouldn't expect this to work 
                                # as you imported the type, not the module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
>>> datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)

我怀疑你或你正在使用的其中一个模块是这样导入的: from datetime import datetime.

  • 这是“日期时间”最令人沮丧的愚蠢方面之一。编写它的人应该进行一些重构。 (8认同)
  • 令人困惑的Python! (6认同)
  • @Jean,这是日期时间用其类名之一(而不是 python 的类名)隐藏其自己模块的名称的错误。 (6认同)
  • 谢谢!忽略这一点是一件小事,但却很难找到. (2认同)
  • @jozzas很棒的答案.我遇到了timedelta的问题,用你的解决方案解决了.TXS. (2认同)

Rou*_*ouR 67

对于python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)
Run Code Online (Sandbox Code Playgroud)

  • +1.我认为这应该是正确的答案,因为据我所知,`import datetime`总是会导致问题,所以我赞成使用`from datetime import datetime'的解决方案. (10认同)

wai*_*kuo 11

你应该用

date = datetime(int(year), int(month), 1)
Run Code Online (Sandbox Code Playgroud)

或改变

from datetime import datetime
Run Code Online (Sandbox Code Playgroud)

import datetime
Run Code Online (Sandbox Code Playgroud)


M. *_*aul 8

如果您使用过:

from datetime import datetime
Run Code Online (Sandbox Code Playgroud)

然后只需将代码编写为:

date = datetime(int(year), int(month), 1)
Run Code Online (Sandbox Code Playgroud)

但如果你曾经使用过:

import datetime
Run Code Online (Sandbox Code Playgroud)

那么只有你可以写:

date = datetime.datetime(int(2005), int(5), 1)
Run Code Online (Sandbox Code Playgroud)


Rob*_*ino 8

您实际上应该将模块导入其自己的别名中

import datetime as dt
my_datetime = dt.datetime(year, month, day)
Run Code Online (Sandbox Code Playgroud)

与其他解决方案相比,上述优点如下:

  • 调用变量my_datetime而不是date减少混乱,因为datedatetime模块中已经有一个(datetime.date)。
  • 模块和类(都称为datetime)不会相互遮挡。


小智 5

我遇到了同样的错误,也许您已经使用 only 导入了模块,import datetime所以更改 from datetime import datetime为 only import datetime。我改回来后它对我有用。