Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

Namerror: name conta is no defined

Boa noite pessoal! Aprendendo diariamente... Mas com algumas dúvidas:

Ao executar os métodos de deposita, extrato e saca pelo consoleexibem os seguintes erros:

from conta import Conta Conta(123, "Nico", 55.5, 1000.0) Construindo objeto ... <conta.Conta object at 0x102c36130> = Resultado ok.. <conta.Conta object at 0x102c36130>

Erro dizendo que conta não é definida..

conta.deposita(300.0) Traceback (most recent call last): File "", line 1, in NameError: name 'conta' is not defined

Erro dizendo que conta não é definida..

conta.extrato() Traceback (most recent call last): File "", line 1, in NameError: name 'conta' is not defined

Erro dizendo que conta não é definida..

conta.saca(100.0) Traceback (most recent call last): File "", line 1, in NameError: name 'conta' is not defined

A classe digita foi:

class Conta:

def __init__(self, numero, titular, saldo, limite):
    print("Construindo objeto ... {}".format(self))
    self.numero = numero
    self.titular = titular
    self.saldo = saldo
    self.limite = limite

def extrato(self):
    print("Saldo de {} do titular {}".format(self.saldo, self.titular))

def deposita(self, valor):
    self.saldo += valor

def saca(self, valor):
    self.saldo -= valor

Neste caso, onde será o erro que não percebo por gentileza? Obrigado!

12 respostas

Olá Fabiano, Acredito que faltou declarar o nome da variável que guardará a instância da classe Conta. Poderia ser algo do tipo:

conta = Conta(123, "Nico", 55.5, 1000.0)

e posteriormente chamar

conta.deposita(300.0)

Olá Lucas, valeu a dica. Executei aqui: Deu certo..

conta = Conta(123, "Nico", 55.5, 1000.0) Construindo objeto ... <conta.Conta object at 0x10a00e130>

Agora..

Na hora da chamada do método:

conta.deposita(300.0) Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'deposita'

Faltou algo ainda?
Obrigado!

Opa, agora não consigo ver nada errado. Talvez tenha faltado identar as funções extrato, deposita e saca para dentro da classe Teria que ficar algo assim:

class Conta:
    def __init__(self, numero, titular, saldo, limite):
        print("Construindo objeto ... {}".format(self))
        self.numero = numero
        self.titular = titular
        self.saldo = saldo
        self.limite = limite

    def extrato(self):
        print("Saldo de {} do titular {}".format(self.saldo, self.titular))

    def deposita(self, valor):
        self.saldo += valor

    def saca(self, valor):
        self.saldo -= valor

Mas não tenho certeza

Cara, já identei de várias mais tirei espaço e mesmo assim não executa.. Muito atípico realmente..

Obrigado!

Pode ser um erro na IDE, tenta executar em outra pra ver se funciona sem problema, se vc tiver pelo Pycharm testa no VSCode, se não quiser baixar mais nada no seu pc / n tiver espaço testa no google colab ou em alguma IDE online do python tipo essa se ainda assim tiver dando erro nessas outras plataformas me avisa e me manda seu codigo completo no github, testei essa parte por aqui e rodou tudo certinho.

Se o erro estiver na IDE mesmo tenta atualizar ou reinstalar ela pra ver se volta a funcionar, se não voltar entra no discord da alura e pede a ajuda de algum instrutor por lá, manda um email pra contato@alura.com.br e pede o link do server caso você ainda não esteja por lá.

Olá Luigi, obrigado! Cara deu erro também ou eu que não sei executar, veja:

Mensagem de erro, mesmo executando..

Tenta criar a classe dentro do arquivo, cria uma nova linha e coloca ele lá, essa ide online n vai te deixar importar pelo terminal n, (pelo menos eu n sei fazer isso nela)

class Conta:
    def __init__(self, numero, titular, saldo, limite):
        print("Construindo objeto ... {}".format(self))
        self.numero = numero
        self.titular = titular
        self.saldo = saldo
        self.limite = limite

    def extrato(self):
        print("Saldo de {} do titular {}".format(self.saldo, self.titular))

    def deposita(self, valor):
        self.saldo += valor

    def saca(self, valor):
        self.saldo -= valor

conta = Conta(123, "Nico", 55.0, 1000.0)
conta.deposita(300.0)
conta.extrato()

>>>Construindo objeto ... <__main__.Conta object at 0x7f572a978ee0>
>>>Saldo de 355.0 do titular Nico

O que me fez pensar que esse é o problema que você deve estar tendo, me manda um print dos seus arquivos na sua IDE, como eles tão organizados, muito provavelmente você não ta conseguindo acessar a classe porque tem alguma pasta após o path que seu terminal está que você não está informando.

Por exemplo, se eu estou no C:\\Usuario\meus_programas_em_python\programa_1e quero acessar o arquivo conta que esta em C:\\Usuario\meus_programas_em_python\programa_1/src/conta.py no python eu tenho que passar esse path pra ele

from src.conta import Conta

Se você tem ainda mais pastas você vai colocando mais pra frente:

#C:\\Usuario\meus_programas_em_python\programa_1/src/classes/relativo_a_contas/conta.py
from src.classes.relativo_a_contas.conta import Conta

Lembrando que isso vai variar de acordo com onde você está no seu terminal, se você sai do programa_1 e entra na pasta src você vai estar uma pasta a frente, o que talvez não dê, mas se você voltar uma pra trás você precisaria adicionar programa_1 antes do src no seu from.

Entendi, até executei dentro do diretório venv mas mesmo assim não deu certo..

Segue as informações.. Obrigado!

➜ oo pwd

/Users/fabianos/PycharmProjects/oo

➜ oo ls -l

drwxr-xr-x 7 fabianos staff 224 26 Jul 21:21 pycache -rw-r--r-- 1 fabianos staff 527 24 Jul 19:03 conta.py -rw-r--r-- 1 fabianos staff 951 26 Jul 20:36 contateste.py -rw-r--r-- 1 fabianos staff 107 26 Jul 21:23 desafio.py -rw-r--r-- 1 fabianos staff 325 15 Jun 19:19 exercicios.py -rw-r--r-- 1 fabianos staff 519 14 Jun 21:25 main.py -rw-r--r-- 1 fabianos staff 325 15 Jun 19:21 teste.py drwxr-xr-x 10 fabianos staff 320 27 Jul 15:01 venv ➜ oo

➜ oo python3 Python 3.9.5 (default, May 4 2021, 03:36:27) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin Type "help", "copyright", "credits" or "license" for more information.

from conta import Conta conta = Conta(123, "Nico", 55.5, 1000.0) Construindo objeto ... <conta.Conta object at 0x107ce0040>

conta.titular 'Nico' conta.numero 123 conta.deposita(300.0) Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'deposita'

conta.extrato() Traceback (most recent call last): File "", line 1, in AttributeError: 'Conta' object has no attribute 'extrato'

Por algum motivo seu pycharm n está detectando as coisas direito que bizarro, tenta rodar o código pelo vsc ou por essa IDE online que ela é mais completa e deve funcionar tudo direito nela (diferente do outro que eu tinha mandado antes que é mais simplezinho). Se você não estiver dentro de uma venv recomendo usar tbm.

solução!

Cara, Perfeito!

Deu certo!

Veja:

from main import Conta conta = Conta(123, "Nico", 55.5, 1000.0) Construindo objeto ... <main.Conta object at 0x7f8110faf670> conta.deposita(300.0) conta.saldo 355.5 conta.extrato <bound method Conta.extrato of <main.Conta object at 0x7f8110faf670>> conta.extrato() Saldo de 355.5 do titular Nico conta.saca(55.0) conta.extrato() Saldo de 300.5 do titular Nico

Vou executar no pycharm se não der certo, testo no replit.. Muito obrigado e boa semana!

Amigo, quando alguem encontrar a solução pro seu problema marque a solução do problema como solução, não a ultima mensagem da thread como solução. Quando você marca uma mensagem como solução uma outra pessoa que tenha a mesma duvida consegue ir direto pra resolução do problema pelo jump no começo da página, se você marca uma mensagem que não é a resposta isso pode confundir outro aluno que veio buscando entender o mesmo problema. IMostrando onde fica o botão para ir direto pra solução de uma duvida no forumAlém disso se você marca outra mensagem (que não a solução do problema) como solução você está deixando de recompensar a pessoa que conseguiu resolver sua dificuldade pela ajuda. Se você mesmo encontrar a solução pro seu problema você não só pode como deve escrever como fez e marcar essa sua solução como resposta final como por exemplo essa solução da Bárbara pra um problema que ela teve. Mas se foi outra pessoa que solucionou você marca a resposta dessa pessoa como solução como por exemplo nessa pergunta do Ubiratan onde a Sthefanie respondeu ele com o que ele precisava e depois ele agradesceu e seguiu com outros tópicos, mas marcando a solução na resolução do problema que ele teve.

To escrevendo e dizendo tudo isso porque é a 2ª vez que vejo você marcando seu agradecimento como resposta e isso pode tanto confundir outros alunos buscando a solução de um problema quanto frustrar um aluno que dedicou o tempo dele pra resolver o seu problema com o intuito de ajudar claro, mas que também quer ser recompensado se a ajuda que ele deu solucionou seu problema.