263 votes

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

Voici ma classe Transaction:

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 lorsque j'essaie d'exécuter la fonction date:

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

Je reçois l'erreur suivante:

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

Comment puis-je réparer cela?

620voto

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 méthode strptime. Ou, vous pourriez changer l'instruction d'importation pour ceci :

from datetime import datetime

et y accéder comme vous le faites.

Les personnes qui ont fait le module datetime ont également nommé leur classe datetime :

#module  classe    méthode
datetime.datetime.strptime(date, "%Y-%m-%d")

35voto

Thomas Orozco Points 15280

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

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

Comme mentionné par Jon Clements dans les commentaires, certaines personnes font from datetime import datetime, ce qui lierait le nom datetime à la classe datetime, et rendrait votre code initial fonctionnel.

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

  • import datetime: c'est le module (ce que vous avez actuellement).
  • from datetime import datetime: c'est la classe.

5voto

Kursad Points 113

J'ai rencontré le même problème et ce n'est pas la solution que vous avez mentionnée. J'ai donc changé "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 réponse correcte à cette question.

4voto

bibs2091 Points 11

Les solutions mentionnées par les autres sont correctes. Mais pour moi, c'était un problème avec une autre bibliothèque important le module datetime pour moi et remplaçant la classe datetime que j'importais. un exemple avec bibliothèque tsai:

from datetime import datetime
from tsai.all import *

Cela vous donnera l'erreur: 'object module' n'a pas d'attribut 'strptime'.

Dans ce cas, il suffit de changer l'ordre des importations ou de ne pas tout importer (même si la documentation le fait) :

from tsai.all import *
from datetime import datetime

3voto

Ayse Points 36

Les valeurs peuvent différer en fonction de l'utilisation.

import datetime
date = datetime.datetime.now()
date.strftime('%Y-%m-%d') # le type de variable date est datetime

La valeur de la variable date doit être une chaîne :

date = '2021-09-06'
datetime.datetime.strptime(date, "%Y-%m-%d")
str(datetime.datetime.strptime(date, "%Y-%m-%d")) # afficher différemment

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X