AttributeError: o módulo 'datetime' não tem atributo 'strptime'

153

Aqui está a minha Transactionturma:

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 estou tentando executar a datefunção:

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

Estou recebendo o seguinte erro:

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

Como posso consertar isso?

Michael
fonte
13
from datetime import datetime
Ashwini Chaudhary

Respostas:

384

Se eu tivesse que adivinhar, você faria o seguinte:

import datetime

na parte superior do seu código. Isso significa que você precisa fazer isso:

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

para acessar o strptimemétodo Ou você pode alterar a instrução de importação para isso:

from datetime import datetime

e acesse-o como você é.

As pessoas que criaram o datetimemódulo também nomearam sua classedatetime :

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

fonte
12
Lembra da cidade Colômbia em Colômbia: en.wikipedia.org/wiki/Colombia,_Huila
sindri_baldur
16

Use a chamada correta: strptimeé um método de datetime.datetimeclasse da classe, não é uma função no datetimemódulo.

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

Como mencionado por Jon Clements nos comentários, algumas pessoas o fazem from datetime import datetime, o que vincularia o datetimenome à datetimeclasse e faria seu código inicial funcionar.

Para identificar qual caso você está enfrentando (no futuro), observe suas instruções de importação

  • import datetime: esse é o módulo (é o que você tem agora).
  • from datetime import datetime: essa é a classe.
Thomas Orozco
fonte
Infelizmente - se você está adaptando base de código de outra pessoa - não é incomum para algumas pessoas a fazer from datetime import datetimee para outros sistemas é apenas uma import datetimecomo que espera datetimepara ser um módulo ...;)
Jon Clements
1

Eu tenho o mesmo problema e não é a solução que você disse. Então, mudei o "from datetime import datetime" para "import datetime". Depois disso, com a ajuda de "datetime.datetime", posso obter os módulos inteiros corretamente. Eu acho que essa é a resposta correta para essa pergunta.

Kursad
fonte