พิมพ์ object 'datetime.datetime' ไม่มีแอตทริบิวต์ 'datetime'


127

ฉันได้รับข้อผิดพลาดต่อไปนี้:

พิมพ์ object 'datetime.datetime' ไม่มีแอตทริบิวต์ 'datetime'

ในบรรทัดต่อไปนี้:

date = datetime.datetime(int(year), int(month), 1)

มีใครทราบสาเหตุของข้อผิดพลาดหรือไม่

ฉันนำเข้า datetime ด้วยfrom datetime import datetimeif that help

ขอบคุณ

คำตอบ:


225

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)

แต่ถ้าคุณนำเข้า 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)

from datetime import datetimeฉันสงสัยว่าคุณหรือหนึ่งในโมดูลที่คุณกำลังใช้มีการนำเข้าเช่นนี้


3
@jozzas คำตอบที่ดี ฉันมีปัญหาเกี่ยวกับ timedelta ที่แก้ไขได้ด้วยโซลูชันของคุณ Txs
Luis Miguel

1
@Jean นี่เป็นข้อผิดพลาดของ datetime shadowing ชื่อโมดูลของตัวเองด้วยชื่อคลาสหนึ่งชื่อไม่ใช่ของ python
Robino

85

สำหรับ python 3.3.2

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)

12
+1 ฉันคิดว่านี่น่าจะเป็นคำตอบที่ถูกต้องเพราะเท่าที่ฉันรู้import datetimeมักทำให้เกิดปัญหาดังนั้นฉันจึงชอบวิธีแก้ปัญหาที่ใช้from datetime import datetime
jeff

14

คุณควรใช้

date = datetime(int(year), int(month), 1)

หรือเปลี่ยน

from datetime import datetime

ถึง

import datetime

11

คุณควรนำเข้าโมดูลเป็นนามแฝงของตัวเองจริงๆ

import datetime as dt
my_datetime = dt.datetime(year, month, day)

ข้างต้นมีประโยชน์เหนือโซลูชันอื่น ๆ ดังต่อไปนี้:

  • การเรียกใช้ตัวแปรmy_datetimeแทนการdateลดความสับสนเนื่องจากมีdateโมดูล datetime อยู่แล้ว( datetime.date)
  • โมดูลและคลาส (เรียกว่าทั้งคู่datetime) ไม่เป็นเงาซึ่งกันและกัน

1

หากคุณเคยใช้:

from datetime import datetime

จากนั้นเขียนโค้ดเป็น:

date = datetime(int(year), int(month), 1)

แต่ถ้าคุณเคยใช้:

import datetime

จากนั้นคุณเท่านั้นที่สามารถเขียน:

date = datetime.datetime(int(2005), int(5), 1)


1

ผมทำงานเป็นข้อผิดพลาดเดียวกันบางทีคุณอาจจะได้นำเข้าแล้วโมดูลโดยใช้เพียงimport datetimeเพื่อเปลี่ยน ไปเท่านั้นform datetime import datetime import datetimeมันใช้ได้ผลสำหรับฉันหลังจากที่ฉันเปลี่ยนกลับ


-2
from datetime import datetime
import time
from calendar import timegm
d = datetime.utcnow()
d = d.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
utc_time = time.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
epoch_time = timegm(utc_time)

6
พยายามหลีกเลี่ยงคำตอบแบบใช้รหัสเท่านั้น คุณสามารถแก้ไขโพสต์ของคุณเพื่อเพิ่มคำอธิบายและลิงก์เพื่อสนับสนุนโค้ดของคุณ
Tomerikoo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.