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

erro de modulo

olá boa noite, estou a varios dias tentando resolver esse erro de modulos, alguem poderia me ajura? ja tentei varias opções e nada...Insira aqui a descrição dessa imagem para ajudar na acessibilidade

6 respostas

Bom dia Cleiton, tudo bom?

Esse erro deve estar ocorrendo pois o python esta iniciando o script diretamente no diretório "cardápio", ficando com o diretório padrão do 'os' em "./cardapio" e quando você tenta referenciar "modelos" ele tenta fazer o caminho "./cardapio/modelos". Tenta mover o "app.py" para o mesmo nível do script "conta_bancaria.py", isso deve solucionar o erro

olá Gabriel, obrigado por tentar me auxiliar neste problema, pois bem seguindo sua dica realmente tive uma alteração, porem agors esta apresentando erro no modulo Avaliação em app.py sendo que o codigo esta correto validei os arquivos.py porem ao importar no app.py semprre a mesma menssagem... segue telas do codigoInsira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Resolução rápida

Certo, o erro tem uma lógica parecida com a anterior. De modo simplificado o problema é em 'from avaliacao import Arquivo', ele deve ser 'from .avaliacao import Arquivo', explicando melhor:

Explicação

Porque adicionar o '.' e qual diferença ele faz no import? Ao nos referirmos a um arquivo python via: from .arquivos import Arquivo o python aplica a seguinte lógica:

1. Diretório absoluto

Ele vai referenciar o diretório absoluto onde o python foi iniciado (via sys.path). No seu caso pegando 'C:...\exercicios orientada a objetos', chamado de caminho absoluto

2. Analisar
  1. Com o diretório absoluto em mãos, ao dar o comando:

    from avaliacao import Avaliacao
    

    Ele vai buscar o arquivo avaliacao.py no diretório absoluto (ficando 'C:...\exercicios orientada a objetos\avaliacao.py') e então tentar encontrar no arquivo a classe Avaliacao.

  2. Mas caso exista um ponto (from .avaliacao import Avaliacao), então vai configurar a busca com 'level' para retroceder os diretórios do sys.path do arquivo em que usou o import. Cada ponto adicionado é um nível de retrocesso no diretório (não deve retroceder mais do que o diretório absoluto)

    # Estrutura do 'import'	
    Arquivo = __import__("arquivos", # nome parcial
                         globals(), locals(),
                         fromlist=["Arquivo"],
                         level=1) # ← 1 ponto  ➜ “suba 1 nível e depois procure”
    
3. Execução
  1. No caso de a gente estar no arquivo 'C:...\exercicios orientada a objetos\modelos\restaurantes.py', ao tentar fazer:

    from avaliacao import Avaliacao
    

    Ele vai buscar buscar Avaliacao em: Diretório absoluto + avalicao.py ➜ 'C:...\exercicios orientada a objetos\avalicao.py'

  2. No caso de:

    from .avaliacao import Avaliacao
    

    Ele vai buscar buscar Avaliacao em: Construção: Caminho do script - nome do script + avalicao.py Resultado: 'C:...\exercicios orientada a objetos\modelos\avalicao.py' (level=1)

  3. E em outro caso como:

    from ..avaliacao import Avaliacao
    

    Ele vai buscar buscar Avaliacao em: Construção: Caminho do script - nome do script - o próximo diretório + avalicao.py Resultado: 'C:...\exercicios orientada a objetos\avalicao.py' (level=2)

Espero que tenha entendido, qualquer coisa só chamar aqui ou no LinkedIn

ola Gabriel Garcia Pereira muito obrigado pelo seu retorno, entendi a solução, porem ainda permanece o mesmo erro... bem estranho kkkInsira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Bom dia, vc alterou, mas faltou apenas salvar o script, só dar um Ctrl+

Opa, passando apenas para dar um feed back, deu super certo com o '.' muito obrigado pela ajuda e paciência, com muita dedicação espero conseguir avançar na programação, mais uma vez muito obrigado, agora consigo seguir no curso.