2013-09-27 18 views
8

Jak wywołujesz funkcję z zaimportowanego pliku? na przykład:Python: wywoływanie funkcji z zaimportowanego pliku

Test:

import test2 
def aFunction(): 
    print "hi there" 

Test2:

import test 
aFunction() 

To daje mi błąd imię, mówiąc moja funkcja nie jest zdefiniowana. Próbowałem również:

from test import aFunction 

oraz:

from test import * 

Ja również nie próbowano importowania test2 w teście. Przychodzę do Pythona z C++, więc obawiam się, że brakuje mi czegoś oczywistego dla weteranów programów Pythona ...

+1

Twój 'z testów aFunction' przywóz powinny pracowali, jaki błąd widziałaś? –

+3

Zauważ, że jest również pakiet ['test'] (http://docs.python.org/2/library/test.html) dołączony do Pythona, możesz zaimportować * to * zamiast tego. –

+0

Miałem ten sam błąd w moim większym projekcie, stworzyłem pliki testowe tylko po to, by pokazać mój problem. Wystąpił błąd "Błąd importu: Nie można zaimportować nazwy" Funkcja "". – RageCage

Odpowiedz

9

Tworzysz cykliczny import. test.py import test2.py, który próbuje importować test.py.

Nie rób tego. Do czasu test2 import test, ten moduł nie ukończył wykonywania całego kodu; funkcja nie została jeszcze zdefiniowana:

  • test jest kompilowany i wykonany, a pusty moduł obiekt jest dodawany do sys.modules.

  • Uruchomiono linię import test2.

    • test2 jest kompilowany i wykonany, a pusty moduł obiekt jest dodawany do sys.modules.

    • Uruchomiono linię import test.

      • test jest już obecny jako moduł w sys.modules cel ten powrócił i związany z nazwą test.
    • Następna linia próbuje uruchomić test.aFunction(). Nie ma takiej nazwy w test. Zgłaszany jest wyjątek.

  • Linie wyznaczające def aFunction() nigdy nie są wykonywane, ponieważ wyjątek został podniesiony.

Usuń linię import test2 i uruchom test2.pybezpośrednio oraz importowania funkcję będzie działać prawidłowo:

import test 

test.aFunction() 
+0

+1 Dobre wyjaśnienie sposobu rozwiązania problemu przywozu. Ktoś, z kim rozmawiałem wczoraj (z ciężkim tłem Java) był naprawdę zaskoczony sposobem, w jaki importowanie faktycznie działa w Pythonie. – Brian

+0

Podejrzewałem to. Jak zobaczysz, wspomniałem, że zrobiłem to w obie strony. – RageCage

+0

@BraydonKains Musiało być coś innego, ponieważ to działa. – Brian

Powiązane problemy