Pobieranie wyniku innej funkcji. ImportError

0

Witam.
Mam dwa pliki jeden.py i dwa.py w pliku jeden.py mamy taki kod:

from dwa import lol
def gettable():
    try:
        con = MySQLdb.connect('localhost', 'root', 'oskar', 'lager')
        con.autocommit(True)
    except MySQLdb.Error, e:
        print "Error %d: %s" % (e.args[0], e.args[1])
        sys.exit(1)
    cur = con.cursor()
    cur.execute("SHOW TABLES;")
    for (table_name) in cur:
        lol(table_name)

a w pliku dwa.py taki:

 from jeden import gettable
gettable()
def lol(nazwa):
    print(nazwa)

gdy to uruchomie dostaje komunikat: ImportError: cannot import name gettable. (zapętlony import?)
Jak mogę to rozwiązać by plik dwa.py dostal table_name. Próbowalem już z global, a jak się wkur.... to zrobie zapis do pliku i odczyt tego :).
Już nie mam pomysłu co robić

0

Komunikat pokazuje ci wyraźnie gdzie masz błąd, przeczytaj go jeszcze raz:
cannot import name gettable

Pokaż plik mag.py, bo tam masz błąd (albo importujesz nie to co trzeba).

0

plik mag.py to jest jeden.py :) (poprawione) a plik już pokazałem.

0

Moduł dwa wywołuje metodę gettable z modułu jeden, która potrzebuje z kolei metody lol z modułu dwa, ale ta nie jest jeszcze zdefiniowana (zauważ, że wywołanie gettable() jest nad deklaracją metody lol). Trochę to skomplikowane i jeśli nie rozumiesz, to się nie martw - po prostu tego nie rób. Wpadłeś w pułapkę circular dependency, czyli dwa moduły zależą od siebie nawzajem. Jest to wynik złego rozplanowania modułów. Jeśli każdy moduł będzie miał określone zadanie to nie powinno się zdarzyć. Masz dwie możliwości, pierwsza - najprostsza - to wsadzić wszystko do jednego modułu, skoro są one dosyć małe.

Druga to przesunąć metodę lol na górę, nad import. Czyli w pliku dwa.py:

def lol(nazwa):
    print(nazwa)

from jeden import gettable
gettable()

Teraz jak wywoływana jest metoda gettable(), to metoda lol znajduje się już w pamięci (jest wczytana).

Edit: Tutaj więcej dowiesz się jak działają importy: http://stackoverflow.com/questions/744373/circular-or-cyclic-imports-in-python

1 użytkowników online, w tym zalogowanych: 0, gości: 1