Próbuję przeładować moduł, który już zaimportowałem w Pythonie 3. Wiem, że wystarczy zaimportować raz, a import
ponowne wykonanie polecenia nic nie da.
Wykonywanie reload(foo)
powoduje ten błąd:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
...
NameError: name 'reload' is not defined
Co oznacza błąd?
python
python-3.x
Lonnie Price
źródło
źródło
reload
w scenariuszu są rzeczywiście bardzo rzadkie, a osoby używające tego rodzaju mrocznej sztuki raczej nie przeczytają tego komentarza. Jeśli jednak tworzysz moduł i używasz konsoli IPython do interaktywnego testowania,reload
może to być przydatne w tym przepływie pracy. Jak jednak powiedział @Evan, uważaj na skutki uboczne importu. Ogólnie rzecz biorąc, powiedziałbym, żeby unikaćreload
modułów innych osób.reload
tworzenie własnych ma sens w czasie projektowania.Dla> = Python3.4:
Dla <= Python3.3:
W przypadku Python2.x:
Użyj wbudowanej
reload()
funkcji.źródło
źródło
importlib
zamiast tego.Aby rozwinąć wcześniej napisane odpowiedzi, jeśli potrzebujesz jednego rozwiązania, które będzie działać we wszystkich wersjach Pythona 2 i 3, możesz użyć następujących:
źródło
Polecam użycie następującego fragmentu kodu, ponieważ działa we wszystkich wersjach Pythona (wymaga
six
):źródło
Aby uzyskać zgodność z python2 i python3, możesz użyć:
źródło
Jeśli nie chcesz używać bibliotek zewnętrznych, jednym z rozwiązań jest ponowne utworzenie metody reload z pythona 2 dla pythona 3, jak poniżej. Użyj tego w górnej części modułu (zakłada Python 3.4+).
BTW przeładowanie jest bardzo wymagane, jeśli używasz plików Pythona jako plików konfiguracyjnych i chcesz uniknąć ponownego uruchamiania aplikacji .....
źródło