Mistä syystä AttributeError: ' -moduuli ' objektilla ei ole attribuuttia ' check\_output ', Pythonissa?


Paras vastaus

Ilman koodia on vaikea saada lopullista vastausta, mutta Mielestäni ongelmana on, että tuomasi koodi on jotain samanlaista kuin tässä:

Sinulla on moduuli nimeltä fluff ja moduulin sisällä sinulla on luokka kutsutaan fluff; fluff-luokassa on menetelmä nimeltä check\_output

Koodisi näyttää tältä:

import fluff

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

Ongelmana on, että kaikki id = ”b010734e4c”>

tekee tuoda fluffimoduulin. Tarvittavaa nukka-luokkaa kutsutaan itse asiassa fluff.fluff.

On olemassa kaksi ratkaisua:

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

Tämä on yksi syy siihen, miksi nimityskäytäntö on niin tärkeä – jos moduulit ja luokat noudattavat PEP8-nimeämiskäytäntöjä, joiden koodi olisi

from fluff import Fluff # this imports the fluff class.

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

Tuo iso kirjain F saattaa olla riittävä estämään virheet – tai ainakin vihjaamaan sinut mahdollisiin ongelmiin.

-——

Toinen mahdollinen vastaus on, että tuotava moduuli on varjossa toisella tiedostolla (toisin sanoen on olemassa samanniminen tiedosto, jonka Python löytää aikaisemmin etsittäessään mitä tuoda). Yleisin syy tähän aloittelijoille on, kun nimeät komentosarjan samalla tavalla kuin moduuli, jota yrität tuoda; koska Python etsii AINA nykyisestä hakemistotiedostosta, jos sinulla on skripti nimeltä foo.py ja se tekee Tuo foo, tuonti tuo komentosarjan nimeltä foo.py – luultavasti ei sitä, mitä haluat.

Paras tapa diagnosoida tämä ongelma on avata interaktiivinen konsoli samassa hakemistossa ja kirjoittamalla:

>>> import

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

missä on tuotavan moduulin nimi. Komennon lähtö rivillä 2 on tiedoston polku, jonka Python yritti tuoda, ja näet, onko tiedoston siellä.

Vastaa

Katselematta koodissasi se voi olla yksi kahdesta ongelmasta (mutta ei rajoitu näihin kahteen), jotka voisin ajatella heti lepakosta:

  1. Moduulia ei ole asennettu oikein. Tarkista moduuli sivustopaketit-kansiosta. Jos se on siellä, se voi olla ongelma nro. 2, joka on:
  2. Ei käynnissä sopivalla Python-versiolla, ts. Asennetaan Python2: lle tarkoitettuja moduuleja, mutta soitetaan Python3-tuonnilla. Poista moduulin asennus pipin avulla ja yritä sitten asentaa uudelleen pip3: lla sopivan version saamiseksi. Etkö ole varma miksi, mutta jotkut koneet, kuten Raspberry Pi Zero W v1.1, oletusarvoisesti pip-komennon Python2: lle 3: n sijaan. Asentaminen uudelleen pip3: lla toimi minulle, koska käytän koodiani python3 -komento tavallisen python sijasta.

Voisin ehdottaa väliaikaista ”likainen” ratkaisua, joka on kopioida moduulin lähde omaan työkansion, eli ottamalla “module” -kansio ja sijoittamalla se samaan kansioon kuin käyttämäsi lähdetiedosto. Saattaa myös olla, että olet kloonannut git-arkiston tai purettu .zip-kansiosta, jonka module.py-tiedosto on toisessa kansiossa, joka on toisessa samannimisessä kansiossa. Tässä tapauksessa voi olla hyödyllistä tuoda module.module moduulina sen sijaan, että tuisit moduulin heti, kuten näin:

import module.module as module

sijasta

import module

, mikä vähentää koodisi muutosten määrää. Onnea!

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *