Seite 1 von 1

Aus Modul auf Variable im Hauptprogramm zugreifen

Verfasst: Montag 1. September 2008, 17:09
von api
Hallo zusammen,

ich habe eine Frage zu Modulen. Nehmen wir an, ich hätte ein Modul "test.py" und würde dieses im Hauptprogramm (also dem aufrufenden Prg) mit import einbinden:

import test

Wenn ich in diesem Modul eine Variable verwenden möchte, die ich aber im Hauptprogramm definiert habe, bekomme ich stets die Fehlermeldung "log not defined" - wobei <log> der Name der Funktion ist.

Wie kann ich dem Modul beibringen, die Variablen des Hauptprogramms zu kennen?

Das hat sicherlich was mit Namensräumen zu tun...

CU,
API[/code]

Verfasst: Montag 1. September 2008, 18:09
von Leonidas
Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.

Lösung: test.py muss die Variablen nicht kennen, denn du nutzt Funktionen mit Parametern, in denen du die Variablen weiterreichst.

Verfasst: Montag 1. September 2008, 18:12
von name
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.

Verfasst: Montag 1. September 2008, 18:17
von Trundle
name hat geschrieben:
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Warum sollte es das nicht geben bzw. warum sollte es kein Problem sein?

Verfasst: Montag 1. September 2008, 18:18
von api
Das heisst, ich muss alle Variablen, die ich in der Funktion (Modul) verwenden will, auch übergeben?

Gibt es keine Möglichkeit, in dem Hauptprogramm die Variable so zu kennzeichnen, dass sie in einem dazugeladenen Modul auch sichtbar ist?

Ich würde vor allem gerne wissen, wie man so etwas am elegantesten löst. Evtl. ist meine ausgelagerte Funktion ja sowieso keine so gute Lösung.

Es geht um folgendes: Ich habe eine Funktion, die ein Logging durchführen soll. Soll heissen, beim Aufruf der Funktion "log ..." wird anhand der übergebenen Parameter in ein bestimmtes Logfile geschrieben. Diese Funktion wollte ich nun als Modul auslagern.

Im Hauptprogramm aber setze ich den LOG-Level fest. Nur hier kann ich ja entscheiden, mit welchem LOG-Level das Prg laufen soll.

Habe ich jetzt einen Gedanken-Fehler - sprich, löst man das in Python ganz anders? Oder anders ausgedrückt, was wäre denn eine elegante Lösung?

Verfasst: Montag 1. September 2008, 18:22
von Leonidas
api hat geschrieben:Gibt es keine Möglichkeit, in dem Hauptprogramm die Variable so zu kennzeichnen, dass sie in einem dazugeladenen Modul auch sichtbar ist?
Wenn das Modul die Variablen ja scheinbar braucht und diese nur im Hauptprogramm definiert werden können, warum hast du es überhaupt in ein Modul ausgelagert. Module heißen nicht umsonst so, der Code sollte eben modular sein, so dass man das Modul importiert, ein paar Parameter übergibt und das Modul nutzen kann.

Verfasst: Montag 1. September 2008, 18:24
von name
Trundle hat geschrieben:
name hat geschrieben:
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Warum sollte es das nicht geben bzw. warum sollte es kein Problem sein?
Mein Fehler ;) Hab da irgendwann was gelesen unds mir anscheinend nicht richtig gemerkt.

Verfasst: Montag 1. September 2008, 18:29
von Leonidas
name hat geschrieben:
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Für alle die die Importe testen und feststellen dass es geht: Hier das Beispiel das zeigt, dass es so doch nicht geht.

Verfasst: Dienstag 2. September 2008, 13:00
von api
Ok, an der Aussage, dass man nur dann etwas auslagern sollte, wenn es auch alleine lauffähig ist (Parameter-Übergabe eingeschlossen), ist was dran.

Ich hatte halt nur vor, das Logging - welches ich auch für andere Programme nutze, als Modul auszulagern.

Aber dann werd ich halt den LOG-Level aus dem Hauptprogramm stets mitübergeben..

Verfasst: Dienstag 2. September 2008, 14:06
von Rebecca
Nur mal so eine Frage: Das [mod]logging[/mod]-Modul kennst du?

Verfasst: Dienstag 2. September 2008, 15:17
von api
Mir ist die Existenz bekannt.. :)

Aber ich habe es noch nie genutzt. Es ist allerdings wirklich eine Überlegung wert, darauf umzusteigen..

Danke für die Nachfrage..