Forum: PC-Programmierung python: global name is not defined


von Osterhasi (Gast)


Lesenswert?

Folgendes PRoblem:

ich importiere ein modul

von einer klasse dieses moduls erzeuge ich ein objekt

in einem anderen, vor der objekterzeugung vollzogenen import steckt eine 
funktion

diese funktion will objekt.methode ausführen, aber dann kommt der 
fehler.

er kommt auch, wenn ich in der funktion "global objekt" stehen habe.

i don't get it

von daniel (Gast)


Lesenswert?

>er kommt auch, wenn ich in der funktion "global objekt" stehen habe.

das gibt zu denken, dass die von dir vermutete Ursache keine ist.

probier mal ein Minimalbeispiel aus ala:

def x():
    global y
    y = 1

x()

welche Exception wird geschmiessen?

von Osterhasi (Gast)


Lesenswert?

danke - keine, da keine importe erfolgen. hier mal ein beispiel:

main.py:
import module
import function
ob_ject = module.cl_ass()
ob_ject.me_thod()
function.function()


module.py:
class cl_ass(object):
  def __init__(self):
    pass
  def me_thod(self):
    print "hello"


function.py:
def function():
  global ob_ject
  print type(ob_ject)


File "function.py", line 7, in function
    print type(ob_ject)
NameError: global name 'ob_ject' is not defined

von daniel (Gast)


Lesenswert?

hmm

bist du sicher, dass es sowas wie global namespace
auch modulextern gibt? wenn ich van rossum wäre, hätte
ich 2 mal überlegt ob so etwas haben will ...

was passiert wenn du obj_ect in function-module vorher
im globalen namespace einfach None zuweist?

function.py:
ob_ject = None
def function():
  global ob_ject
  print type(ob_ject)

von daniel (Gast)


Lesenswert?

vielleicht hat es auch was mit bindungszeitpunkt eines
objektes zu seinem namem zu tun.
wie in diesem beispiel:

def mylist(lst = []):
    lst.append(1)
    return lst

mylist()
mylist()
...

von Osterhasi (Gast)


Lesenswert?

hello
<type 'NoneType'>

Also kann ich einem importierten Modul ein Objekt nicht bekanntmachen?
Oder ist es sowieso besser, das Objekt der Funktion zu übergeben.
Ursache ist, dass ich versuche, das Programm zu unterteilen.
Morgen geht's weiter.
Danke für dein Interesse.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.