Jaký je důvod pro AttributeError: ' modul ' objekt nemá v Pythonu žádný atribut ' check\_output '?


Nejlepší odpověď

Bez zobrazení kódu je těžké přijít s definitivní odpovědí, ale Myslím, že problém je v tom, že importovaný kód je něco podobného tomuto:

Máte modul s názvem fluff a uvnitř tohoto modulu máte třídu s názvem fluff; ve třídě chmýří existuje metoda s názvem check\_output

Váš kód vypadá takto:

import fluff

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

Problém je v tom, že vše, co import fluff provede import chmýřového modulu. Třída chmýří, kterou potřebujete, se vlastně nazývá fluff.fluff.

Existují dvě řešení:

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

To je jeden z důvodů, proč je konvence pojmenování tak důležitá – pokud moduly a třídy se řídí konvencemi pojmenování PEP8, které by kód byl

from fluff import Fluff # this imports the fluff class.

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

Tento kapitál „F“ může stačit k prevenci chyb – nebo vás alespoň upozornit na potenciální problémy.

-——

Další potenciální odpověď je, že importovaný modul je zastíněn jiným souborem (jinými slovy existuje soubor se stejným názvem, který Python najde dříve při hledání toho, co importovat). Nejběžnější příčinou toho u začátečníků je, když pojmenujete skript stejný jako modul, který se pokoušíte importovat; protože Python VŽDY prohledává aktuální soubor adresáře, pokud máte skript s názvem foo.py a dělá import foo, tento import naimportuje skript s názvem foo.py – pravděpodobně to není to, co chcete.

Nejlepší způsob, jak diagnostikovat tento problém, je otevřít interaktivní konzoli ve stejném adresáři a zadat:

>>> import

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

kde je název modulu, který se pokoušíte importovat. Výstupem příkazu na řádku 2 bude cesta k souboru, který se Python pokusil importovat, a uvidíte, zda by se tam měl soubor nacházet.

Odpovědět

Bez pohledu ve vašem kódu by to mohl být jeden ze dvou problémů (ale neomezujících se pouze na tyto dva), na které bych mohl myslet, hned za pálkou, které jsou:

  1. Modul není správně nainstalován. Zkontrolujte modul ve složce balíčků webů. Pokud tam je, mohl by to být problém č. 2, což je:
  2. Neběží s příslušnou verzí Pythonu, tj. Instalace modulů určených pro Python2, ale volání s importem Python3. Pomocí pipu odinstalujte modul a poté zkuste znovu nainstalovat pomocí pip3 a získejte příslušnou verzi. Nejste si jisti, proč, ale některé stroje, jako je můj Raspberry Pi Zero W v1.1, výchozí příkaz pip na Python2 namísto 3. Přeinstalování pomocí pip3 fungovalo pro mě, protože používám svůj kód pomocí python3 místo obvyklého python.

Mohl bych navrhnout dočasné „špinavé“ řešení, kterým je zkopírovat zdroj modulu do vašeho pracovní adresář, tj. převzetí složky „modul“ a její umístění do stejné složky jako zdrojový soubor, který používáte. Může se také stát, že jste naklonovali úložiště git nebo extrahovali ze složky .zip, která má soubor module.py v jiné složce, která je v jiné složce se stejným názvem. V tomto případě by mohlo pomoci importovat modul.module jako modul namísto jednoduchého importu modulu přímo, například takto:

import module.module as module

místo

import module

což snižuje množství změn v kódu. Hodně štěstí!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *