Zauważyłem dzisiaj coś dziwnego, co chciałbym wyjaśnić. Nie byłem w 100% pewien, jak to sformułować jako pytanie, więc Google nie wchodzi w rachubę. Moduł logowania nie ma dostępu do modułu logging.handlers z jakiegoś dziwnego powodu. Spróbuj sam, jeśli mi nie wierzysz:
>>> import logging
>>> logging.handlers
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'handlers'
>>> import logging.handlers
>>> logging.handlers
<module 'logging.handlers' from '/usr/lib/python2.6/logging/handlers.pyc'>
Czy ktoś może wyjaśnić, dlaczego tak się dzieje?
źródło
from module import *
. Prawie zawsze jest to błąd.import zipper
izipper.open()
wiedziałbyś dokładnie, do którego otwarcia dzwonię. W przeciwieństwiefrom zipper import *
do tegoopen()
jest to wbudowany otwarty lub zamek błyskawiczny. Otwarty lub coś innego.import zipper as z
jest znacznie preferowane, jeśli znudzi ci się pisaniezipper
numpy import *
ponieważ niektóre funkcje numpy nie działają, chyba że zaimportujesz wszystkie numpy (straszna wada projektowa z ich strony IMO), ale numpy ma OGROMNĄ liczbę obiektów, które importuje. Skończyło się na tym, że nadpisałem wiele funkcji (myślę, że kopia była jedną ... Jestem zbyt zmęczony, by to sprawdzić). Teraz importuję numpy jako np, jeśli mam zamiar używać numpy tak bardzo, że nie mogę znieść go w kółko.Thomas Wouters odpowiedział na to pytanie bardzo dobrze, ale niestety, znalazłem je dopiero po znalezieniu odpowiedzi w oryginalnej dokumentacji. Pomyślałem, że w tym celu dodam do tego, mając nadzieję, że w przyszłości pojawi się bliżej początku wyszukiwarki.
PYTANIE
import module_name module_name.sub_module_name(parameter)
ODPOWIEDŹ
import module_name
Kluczowym wkładem w tę odpowiedź jest dodanie AttributeError podczas próby zaimportowania „modułu” lub „pakietu”
Mam nadzieję, że to komuś pomoże!
źródło
Niedawno spotkałem się z tą samą dziwną sytuacją. Więc założę się, że usunąłeś import lib od strony trzeciej. Ta usunięta biblioteka zawierała
from logging import handlers
lubfrom logging import *
udostępniła Ciebiehandlers
. A w innym scenariuszu miałeś coś podobnegoimport logging
i właśnie używałeślogging.handlers
i pomyślałeś, że tak to działa, tak jak ja.źródło