Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Bug] Erro ao executar.

#Código 1:

class Avaliacao:

def __init__(self,cliente,nota):
    self._cliente = cliente
    self._nota = nota
    

#Código 2:

from modelos.avaliacao import Avaliacao

class Restaurante:
restaurantes = []

def __init__(self,nome,categoria):
    self._nome = nome.title()   # '_' é camada de segurança para o nome não ser alterado
    self.categoria = categoria.upper()    
    self._ativo = False
    self._avaliacao = []
    Restaurante.restaurantes.append(self)
def __str__(self):
    return f'{self._nome} | {self.categoria}'

@classmethod
def listar_restaurantes(cls):
    for restaurante in cls.restaurantes:
        print(f'{'Nome do Restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Status'.ljust(25)}')
        print(f'{restaurante._nome.ljust(25)} | {restaurante.categoria.ljust(25)} | {restaurante.ativo.ljust(25)}')
    

@property #modificar como o atributo vai ser lido
def ativo (self):
    return 'Sim' if self._ativo else 'Não'


def alternar_estado(self):
    self._ativo = not self._ativo

def receber_avaliacao(self,cliente,nota):
    avaliacao = Avaliacao(cliente,nota)
    self._avaliacao.append(avaliacao)

def media_avaliacoes(self):
    if not self._avaliacao:
        return 0
    soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)
    quantidade_de_notas = len(self._avaliacao)
    media = soma_das_notas / quantidade_de_notas
    
#Código 3:

from modelos.restaurante1 import Restaurante

restaurante_praca = Restaurante('Praça','Gourmet')
restaurante_praca.receber_avaliacao('Gui', 5)
restaurante_praca.receber_avaliacao('Bruno', 4)

def main():
Restaurante.listar_restaurantes()

if name == 'main':
main()

Erro:

from modelos.avaliacao import Avaliacao

ImportError: cannot import name 'Avaliacao' from 'modelos.avaliacao' (c:\Users\bruno\Desktop\Estudos\oosaborexpress\modelos\avaliacao.py). Did you mean: 'avaliacao'?
PS C:\Users\bruno\Desktop\Estudos\oosaborexpress> & C:\Python314\python.exe c:/Users/bruno/Desktop/Estudos/oosaborexpress/modelos/restaurante1.py
Traceback (most recent call last):
File "c:\Users\bruno\Desktop\Estudos\oosaborexpress\modelos\restaurante1.py", line 1, in
from modelos.avaliacao import Avaliacao
ModuleNotFoundError: No module named 'modelos'
PS C:\Users\bruno\Desktop\Estudos\oosaborexpress> & C:\Python314\python.exe c:/Users/bruno/Desktop/Estudos/oosaborexpress/app.py
Traceback (most recent call last):
File "c:\Users\bruno\Desktop\Estudos\oosaborexpress\app.py", line 1, in
from modelos.restaurante1 import Restaurante
File "c:\Users\bruno\Desktop\Estudos\oosaborexpress\modelos\restaurante1.py", line 1, in
from modelos.avaliacao import Avaliacao
ImportError: cannot import name 'Avaliacao' from 'modelos.avaliacao' (c:\Users\bruno\Desktop\Estudos\oosaborexpress\modelos\avaliacao.py). Did you mean: 'avaliacao'?

1 resposta

Olá, Bruno! Tudo bem?

Sobre o erro ao executar a importação da classe Avaliacao no Python, vamos resolver isso. O ImportError e o ModuleNotFoundError indicam que há alguns pontos diferentes para verificar no projeto.

Importante: no trecho da classe Avaliacao que você compartilhou, a classe parece estar correta. Isso indica que o problema provavelmente está na estrutura do projeto, na indentação ou na forma como o arquivo está sendo executado.

Verifique os seguintes itens:

  • Confirme se o arquivo avaliacao.py contém apenas uma classe chamada Avaliacao e se ela está corretamente indentada.
  • Execute o projeto pelo arquivo app.py, e não diretamente pelo arquivo restaurante1.py. Quando restaurante1.py é executado isoladamente, o Python pode não encontrar o pacote modelos, resultando no ModuleNotFoundError.
  • Confira se a pasta modelos está no mesmo nível do arquivo app.py. A estrutura deve ficar semelhante a esta:
oosaborexpress/
├── app.py
└── modelos/
    ├── avaliacao.py
    └── restaurante1.py

Esse exemplo mostra a organização esperada dos arquivos para que as importações funcionem corretamente.

Além disso, observe um detalhe no seu app.py. A condição de execução está incorreta:

if __name__ == "__main__":
    main()

Esse trecho verifica se o arquivo está sendo executado diretamente antes de chamar a função main().

Outro ponto é que o método media_avaliacoes() calcula a média, mas não retorna o valor. O ideal é finalizar o método assim:

media = soma_das_notas / quantidade_de_notas
return media

Esse trecho retorna a média calculada para que ela possa ser utilizada em outras partes do programa.

Caso, após essas verificações, o ImportError continue acontecendo, vale conferir se o arquivo avaliacao.py possui algum erro de indentação ou de sintaxe, pois isso pode impedir que a classe Avaliacao seja carregada corretamente durante a importação.

Qual é a estrutura completa das pastas do seu projeto? Se puder compartilhar uma captura da árvore de arquivos ou listar os diretórios, ficará mais fácil identificar exatamente onde está o problema.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!