python: global name is not defined

Gast #1531455
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
Gast #1531589
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?
Gast #1531692
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
Gast #1531699
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)
Gast #1531705
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.