AttributeError: Das Modul 'datetime' hat kein Attribut 'strptime'.

153

Hier ist meine TransactionKlasse:

class Transaction(object):
    def __init__(self, company, num, price, date, is_buy):
        self.company = company
        self.num = num
        self.price = price
        self.date = datetime.strptime(date, "%Y-%m-%d")
        self.is_buy = is_buy

Und wenn ich versuche, die dateFunktion auszuführen :

tr = Transaction('AAPL', 600, '2013-10-25')
print tr.date

Ich erhalte die folgende Fehlermeldung:

   self.date = datetime.strptime(self.d, "%Y-%m-%d")
 AttributeError: 'module' object has no attribute 'strptime'

Wie kann ich das beheben?

Michael
quelle
13
from datetime import datetime
Ashwini Chaudhary

Antworten:

384

Wenn ich raten müsste, hast du das getan:

import datetime

am Anfang Ihres Codes. Dies bedeutet, dass Sie dies tun müssen:

datetime.datetime.strptime(date, "%Y-%m-%d")

um auf die strptimeMethode zuzugreifen . Sie können die import-Anweisung auch folgendermaßen ändern:

from datetime import datetime

und greifen Sie darauf zu, wie Sie sind.

Die Leute, die das datetimeModul erstellt haben, haben auch ihre Klasse benanntdatetime :

#module  class    method
datetime.datetime.strptime(date, "%Y-%m-%d")

quelle
12
Erinnerungen an die Stadt Kolumbien in Kolumbien: en.wikipedia.org/wiki/Colombia,_Huila
sindri_baldur
16

Verwenden Sie den richtigen Aufruf: strptimeist eine Klassenmethode der datetime.datetimeKlasse, keine Funktion im datetimeModul.

self.date = datetime.datetime.strptime(self.d, "%Y-%m-%d")

Wie von Jon Clements in den Kommentaren erwähnt, tun dies einige Leute from datetime import datetime, die den datetimeNamen an die datetimeKlasse binden und Ihren anfänglichen Code zum Laufen bringen würden.

Sehen Sie sich Ihre Importanweisungen an, um festzustellen, mit welchem ​​Fall Sie (in Zukunft) konfrontiert sind

  • import datetime: das ist das Modul (das haben Sie gerade).
  • from datetime import datetime: das ist die Klasse.
Thomas Orozco
quelle
Leider - wenn Sie die Codebasis eines anderen anpassen - ist dies für einige nicht ungewöhnlich from datetime import datetimeund für andere Systeme ist es genau so, import datetimewie es datetimeein Modul erwartet ...;)
Jon Clements
1

Ich habe das gleiche Problem und es ist nicht die Lösung, die Sie gesagt haben. Also habe ich "von datetime import datetime" in "import datetime" geändert. Danach kann ich mit Hilfe von "datetime.datetime" die gesamten Module korrekt abrufen. Ich denke, das ist die richtige Antwort auf diese Frage.

Kursad
quelle