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!
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:Esto debería permitir que el intérprete localice el paquete “extra” y importe los módulos necesarios correctamente.