AttributeError: le module 'datetime' n'a pas d'attribut 'strptime'

155

Voici ma 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

Et quand j'essaye d'exécuter la datefonction:

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

J'obtiens l'erreur suivante:

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

Comment puis-je résoudre ce problème?

Michael
la source
13
from datetime import datetime
Ashwini Chaudhary

Réponses:

384

Si je devais deviner, vous avez fait ceci:

import datetime

en haut de votre code. Cela signifie que vous devez faire ceci:

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

pour accéder à la strptimeméthode. Ou, vous pouvez modifier l'instruction d'importation comme suit:

from datetime import datetime

et accédez-y comme vous êtes.

Les personnes qui ont créé le datetimemodule ont également nommé leur classedatetime :

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

la source
12
Rappelle la ville de Colombie en Colombie: en.wikipedia.org/wiki/Colombia,_Huila
sindri_baldur
16

Utilisez l'appel correct: strptimeest une méthode de datetime.datetimeclasse de la classe, ce n'est pas une fonction dans le datetimemodule.

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

Comme mentionné par Jon Clements dans les commentaires, certaines personnes le font from datetime import datetime, ce qui lierait le datetimenom à la datetimeclasse et ferait fonctionner votre code initial.

Pour identifier le cas auquel vous êtes confronté (à l'avenir), regardez vos déclarations d'importation

  • import datetime: c'est le module (c'est ce que vous avez en ce moment).
  • from datetime import datetime: c'est la classe.
Thomas Orozco
la source
Malheureusement - si vous adaptez la base de code de quelqu'un d'autre - il n'est pas rare pour certains de le faire from datetime import datetimeet pour d'autres systèmes, c'est juste import datetimecomme il s'attend datetimeà être un module ...;)
Jon Clements
1

J'ai le même problème et ce n'est pas la solution que vous avez indiquée. J'ai donc changé le "from datetime import datetime" en "import datetime". Après cela, avec l'aide de "datetime.datetime", je peux obtenir tous les modules correctement. Je suppose que c'est la bonne réponse à cette question.

Kursad
la source