¿Cuál es el motivo del AttributeError: ' module ' el objeto no tiene atributo ' check\_output ', en Python?


La mejor respuesta

Sin ver el código, es difícil encontrar una respuesta definitiva, pero Creo que el problema es que el código que estás importando es algo similar a esto:

Tienes un módulo llamado fluff y dentro de ese módulo tienes una clase llamado fluff; en la clase fluff hay un método llamado check\_output

Su código se ve así:

import fluff

cfg = fluff.check\_output(stuff) # You want the fluff class here

El problema es que todo eso import fluff es importar el módulo de pelusa. La clase de pelusa que necesita se llama en realidad fluff.fluff.

Hay dos soluciones:

1:

import fluff

cfg = fluff.fluff.check\_output(stuff) # You want the fluff class here

2:

from fluff import fluff # this imports the fluff class.

cfg = fluff.check\_output(stuff) # You want the fluff class here

Esta es una de las razones por las que la convención de nombres es tan importante, si los módulos y las clases siguen las convenciones de nomenclatura de PEP8, el código sería

from fluff import Fluff # this imports the fluff class.

cfg = Fluff.check\_output(stuff) # You want the fluff class here

Esa F mayúscula podría ser suficiente para evitar errores, o al menos para indicarle problemas potenciales

-——

La otra respuesta potencial es que la El módulo que está importando está siendo sombreado por otro archivo (en otras palabras, hay un archivo con el mismo nombre que Python encuentra anteriormente en su búsqueda de qué importar). La causa más común de esto en los principiantes es cuando le asigna el mismo nombre al script que el módulo que está intentando importar; dado que Python SIEMPRE busca en el archivo de directorio actual si tiene un script llamado foo.py y hace una importación foo, esa importación importará el script llamado foo.py – probablemente no sea lo que desea.

La mejor manera de diagnosticar este problema es abrir la consola interactiva en el mismo directorio y escribir:

>>> import

>>> .\_\_file\_\_

donde es el nombre del módulo que está intentando importar. La salida del comando en la línea 2 será la ruta del archivo que Python intentó importar y puede ver si ahí es donde debería estar el archivo.

Responder

Sin mirar en su código, podría ser uno de dos problemas (pero no limitado a estos dos) que se me ocurren, de inmediato, que son:

  1. El módulo no está instalado correctamente. Verifique la carpeta de paquetes de su sitio para el módulo. Si está ahí, podría ser el problema no. 2, que es:
  2. No se está ejecutando con una versión adecuada de Python, es decir, instalando módulos destinados a Python2 pero llamando con la importación de Python3. Use pip para desinstalar el módulo y luego intente reinstalar con pip3 para obtener la versión apropiada. No estoy seguro de por qué, pero algunas máquinas como mi Raspberry Pi Zero W v1.1 predeterminan el comando pip a Python2 en lugar de 3. Reinstalar con pip3 funcionó para mí, ya que estoy ejecutando mi código usando python3 en lugar del comando python habitual.

Podría sugerir una solución temporal «sucia» que es copiar la fuente del módulo en su directorio de trabajo, es decir, tomar la carpeta «módulo» y colocarla en la misma carpeta que el archivo de origen que está ejecutando. También podría ser que haya clonado un repositorio de git o extraído de una carpeta .zip que tiene el archivo module.py dentro de otra carpeta, que está en otra carpeta con el mismo nombre. En este caso, podría ser útil importar module.module como módulo en lugar de simplemente importar el módulo inmediatamente, así:

import module.module as module

en lugar de

import module

lo que reduce la cantidad de cambios dentro de su código. ¡Buena suerte!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *