es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de KeyError al intentar importar un paquete personalizado simplista – aparentemente inconsistente.

Estoy trabajando en el módulo de paquetes del Python Institute y estoy obteniendo un error al intentar importar módulos, pero solo en casos específicos. La estructura de carpeta es visible en la foto adjunta:

C:\Users\Luke\py\packages

Cuando intento ejecutar el siguiente código (para importar módulos específicos y ejecutar las funciones en su interior):

from sys import path

path.append(‘..\packages’)

import extra.good.best.sigma
from extra.good.best.tau import FunT

print(extra.good.best.sigma.FunS())
print(FunT())

Obtengo el mensaje de error: “KeyError: ‘extra'”

Sin embargo, cuando ejecuto el siguiente código, funciona sin problemas:

from sys import path
path.append(‘..\packages’)

import extra.iota
print(extra.iota.FunI())

NOTA – Los diversos módulos en sí son exactamente iguales, la única distinción es que devuelven su propio nombre de módulo específico, por ejemplo, el código del módulo Iota es:

def FunI():
return “Iota”

if name == “main“:
print(“Prefiero ser un módulo”)

¿Alguien puede detectar qué diferencia está causando el error o tiene sugerencias para depurar? Todavía soy bastante nuevo en la codificación, así que cualquier ayuda sería muy apreciada. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El mensaje de error “KeyError: ‘extra'” implica que no existe ningún paquete o módulo llamado “extra”. Esto significa que el intérprete no puede encontrar el paquete “extra” en la estructura de archivos dada.

    Lo más probable es que el problema se deba al hecho de que la instrucción de importación import extra.good.best.sigma está intentando acceder a un paquete relativo al directorio actual (..\\packages), que se encuentra un nivel más arriba en la estructura de carpetas.

    Para solucionar el problema, intente modificar las instrucciones de importación para utilizar rutas absolutas en lugar de rutas relativas. Una forma de hacer esto es cambiar el directorio al directorio padre de “packages” y luego utilizar rutas absolutas para importar los módulos. Esto se puede hacer utilizando el módulo os de la siguiente manera:

    import os
    import sys
    
    # Obtener la ruta absoluta del directorio padre de "packages"
    parent_dir = os.path.abspath(os.path.join(os.getcwd(), ".."))
    
    # Agregar el directorio padre al path del sistema para permitir la importación de módulos
    sys.path.append(parent_dir)
    
    # Importar los módulos utilizando rutas absolutas
    import packages.extra.iota
    import packages.extra.good.best.sigma
    from packages.extra.good.best.tau import FunT
    
    # Llamar a las funciones en los módulos
    print(packages.extra.good.best.sigma.FunS())
    print(packages.extra.iota.FunI())
    print(FunT())
    

    Esto debería permitir que el intérprete localice el paquete “extra” y importe los módulos necesarios correctamente.

Comments are closed.