Seite 1 von 1

Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 07:28
von Empi
Hallo.

Wieso funktioniert

Code: Alles auswählen

VERSION = '1.0_SL1'
ns = 'test'

def __test():
    print ns
    print VERSION
    #ns = 'f'

if __name__ == "__main__":
    print VERSION
    print ns

    __test()
aber

Code: Alles auswählen

VERSION = '1.0_SL1'
ns = 'test'

def __test():
    print ns
    print VERSION
    ns = 'f'

if __name__ == "__main__":
    print VERSION
    print ns

    __test()
wirft eine Exception?

1.0_SL1
test
Traceback (most recent call last):
File "C:\Users\Empi\Desktop\CDB_LoadBalancing\src\test.py", line 15, in <module>
__test()
File "C:\Users\Empi\Desktop\CDB_LoadBalancing\src\test.py", line 7, in __test
print ns
UnboundLocalError: local variable 'ns' referenced before assignment

Re: Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 07:32
von Darii
Durch die Zuweisung wird die Variable eine lokale Variable und du greifst vor ihrer Zuweisung auf sie zu => Fehler. Wenn du auf eine globale Variable schreibend zugreifen möchtest, musst du sie erst mit `gobal` deklarieren.

Code: Alles auswählen

def test():
    global ns
    ...

Re: Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 07:33
von Pekh
Funktionen haben einen eigenen Sichtbereich. Wenn ein Name dort nicht gefunden wird, wird im nächsthöheren Sichtbereich geguckt - in deinem Fall auf Modulebene. Wenn du den selben Namen innerhalb der Funktion aber in irgendeiner Form bindest, existiert er innerhalb des eigenen Sichtbereichs und es wird nicht mehr "nach Außen" geguckt. Und dann stellt er halt fest, daß dem Namen noch nichts zugewiesen wurde.

Bleibt noch Hinzuzufügen, daß es ganz ganz schlechter Stil ist, auf Variablen zuzugreifen, die nicht als Parameter in eine Funktion übergeben wurden. Einzige Ausnahme sind Modulweite Konstanten, aber die sollten naturgemäß nicht mehr verändert werden.

Re: Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 07:47
von Empi
Ihr seid echt schnell!
Besten Dank für eure Hilfe!

Re: Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 08:40
von EyDu
Hallo.

Du möchtest Rückgabewerte verwenden, für genau solche Fälle sind sie gedacht. Außerdem willst du keine Funktionen die mit zwei Unterstrichen beginnen ;-)

Sebastian

Re: Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 11:52
von alpha
Hi Empi

war auch ein "Problem" für mich
http://www.python-forum.de/viewtopic.php?f=1&t=21239

alpha

Re: Zugriffsproblem auf Variable

Verfasst: Dienstag 17. August 2010, 12:01
von Empi
alpha hat geschrieben:Hi Empi
war auch ein "Problem" für mich
http://www.python-forum.de/viewtopic.php?f=1&t=21239
alpha
Bin bisher einfach noch nicht auf eine solche Anforderung gestoßen. Man lernt halt nie aus :oops:
EyDu hat geschrieben:Hallo.
Du möchtest Rückgabewerte verwenden, für genau solche Fälle sind sie gedacht. Außerdem willst du keine Funktionen die mit zwei Unterstrichen beginnen ;-)
Sebastian
Mein Programm macht das schon mit Rückgabewerten und Funktionen - wollte nur "schnell mal was testen" und war echt über das Ergebnis verwundert.
Das mit dem Namen ist schon wirklich absicht, aber das sollten wir an anderer Stelle diskutieren :)