AttributeError: il modulo 'datetime' non ha attributi 'strptime'


155

Ecco la mia Transactionclasse:

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

E quando sto cercando di eseguire la datefunzione:

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

Ricevo il seguente errore:

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

Come posso ripararlo?


13
from datetime import datetime
Ashwini Chaudhary,

Risposte:


384

Se dovessi indovinare, hai fatto questo:

import datetime

nella parte superiore del codice. Questo significa che devi fare questo:

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

per accedere al strptimemetodo. In alternativa, è possibile modificare l'istruzione import in questa:

from datetime import datetime

e accedervi come sei.

Le persone che hanno creato il datetimemodulo hanno anche chiamato la loro classedatetime :

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

12
Ricorda la città Colombia in Colombia: en.wikipedia.org/wiki/Colombia,_Huila
sindri_baldur

16

Usa la chiamata corretta: strptimeè un metodo di datetime.datetimeclasse della classe, non è una funzione nel datetimemodulo.

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

Come menzionato da Jon Clements nei commenti, alcune persone lo fanno from datetime import datetime, il che vincolerebbe il datetimenome alla datetimeclasse e farebbe funzionare il tuo codice iniziale.

Per identificare il caso che stai affrontando (in futuro), guarda le tue dichiarazioni di importazione

  • import datetime: questo è il modulo (è quello che hai adesso).
  • from datetime import datetime: questa è la classe.

Purtroppo - se stai adattando la base di codici di qualcun altro - non è raro che alcuni lo facciano from datetime import datetimee per altri sistemi è solo un import datetimedato che si aspetta datetimeche sia un modulo ...;)
Jon Clements

1

Ho avuto lo stesso problema e non è la soluzione che mi hai detto. Così ho cambiato "da datetime import datetime" a "import datetime". Dopo ciò con l'aiuto di "datetime.datetime" posso ottenere correttamente tutti i moduli. Immagino che questa sia la risposta corretta a questa domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.