mikrocontroller.net

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


Autor: Osterhasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Osterhasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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()
...

Autor: Osterhasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.