Mi az oka az AttributeError: ' modulnak ' az objektumnak nincs attribútuma ' check\_output ', a Pythonban?


Legjobb válasz

Kód látása nélkül nehéz végleges választ kitalálni, de Szerintem a probléma az, hogy az importált kód valami hasonló ehhez:

Van egy modulod, amelynek neve: fluff, és a modul belsejében van egy osztályod fluff; a fluff osztályban van egy módszer, amelyet úgy hívnak: check\_output

A kódod így néz ki:

import fluff

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

A probléma az, hogy mindez Az id = “b010734e4c”>

művelet a fluff modul importálása. A szükséges fluff osztály tulajdonképpen fluff.fluff.

Kétféle megoldás létezik:

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

Ez az egyik oka annak, hogy a névadási konvenció olyan fontos – ha a modulok és az osztályok a PEP8 elnevezési szokásokat követik, a kód a következő lenne:

from fluff import Fluff # this imports the fluff class.

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

Ez az „F” nagybetű elegendő lehet a hibák megelőzéséhez – vagy legalábbis a lehetséges problémákra utalhat

-——

A másik lehetséges válasz az, hogy Az importált modult egy másik fájl árnyékolja (más szavakkal, van egy azonos nevű fájl, amelyet a Python korábban talált az importálandó fájl keresésekor). Ennek leggyakoribb oka a kezdőknél az, amikor a parancsfájl megnevezésével megegyezik az importálandó modullal; mivel a Python MINDIG az aktuális könyvtárfájlban keres, ha van egy „foo.py” nevű szkript és egy „import foo” -t hajt végre, az importálás a „foo.py” nevű szkriptet fogja importálni – valószínűleg nem az, amit akar.

A probléma diagnosztizálásának legjobb módja az Interactive konzol megnyitása ugyanabban a könyvtárban és típusban:

>>> import

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

ahol a az importálni kívánt modul neve. A 2. sorban a parancs kimenete lesz annak a fájlnak az útvonala, amelyet a Python importálni próbált, és láthatja, hogy ott kell-e lennie a fájlnak.

Válasz

Megtekintés nélkül a kódodnál ez a két probléma egyike lehet (de nem korlátozódik erre a kettőre), amire gondolhatnék, rögtön a következőre:

  1. A modul nincs megfelelően telepítve. Ellenőrizze a modult a site-package mappában. Ha ott van, akkor nem probléma lehet. 2, ami:
  2. Nem a Python megfelelő verziójával fut, azaz a Python2-hez szánt modulokat telepíti, de a Python3 importálásával hív. A pip segítségével távolítsa el a modult, majd próbálja meg újratelepíteni a pip3 programmal a megfelelő verzió megszerzéséhez. Nem tudom, miért, de néhány gép, mint például a Raspberry Pi Zero W v1.1, alapértelmezés szerint a pip parancsot Python2 helyett 3 helyett használja. Az újratelepítés a pip3-mal bevált, mivel a kódot a / div> parancs a szokásos python helyett.

Javasolhatok egy ideiglenes „piszkos” megoldást, amely a modul forrásának átmásolása a munkakönyvtár, azaz a „module” mappa felvétele és ugyanabba a mappába helyezés, mint a futtatott forrásfájl. Az is előfordulhat, hogy klónozott egy git-adattárat, vagy kibontott egy .zip mappából, amelynek a module.py fájlja van egy másik mappában, amely egy másik, azonos nevű mappában található. Ebben az esetben segíthet a module.module modulként történő importálásában, ahelyett, hogy egyszerűen importálná a modult, csak így:

import module.module as module

a

import module

helyett, ami csökkenti a kódban végrehajtott változtatások számát. Sok sikert!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük