Seite 1 von 1

XML parsen

Verfasst: Mittwoch 2. November 2005, 22:39
von Gast
hi ! im spe läuft alles problemlos , will ich das skript aber per batch oder in blender reinladen kommt immer:

NameError: global name `doc` is not defined

obwohl name im xml vorkommt und es auch im SPE läuft !?
habe wxpython PYXML und python 2.3 installiert !

PLZ Help!

hier der ausschnitt
-------------------
import Blender
from Blender import Scene
from Blender.Scene import Render
from xml.dom.ext.reader.Sax2 import FromXmlStream

doc = FromXmlStream("c:/go.xml")
Blender.Load("C:/2.blend")

def paul(e,x,y):
for element in doc.getElementsByTagName("name"):

-------------------

Verfasst: Donnerstag 3. November 2005, 02:17
von Joghurt
Globale Variablen gelten nicht automatisch in Funktionen. Warum das unter SPE geht, weiss ich nicht. Es muss

Code: Alles auswählen

def paul(e,x,y):
  global doc
  for ...
Übrigens ist das schlechter Stil: Globale Variablen sowieso und vor allem die Parameter der Funktion e,x und y zu nennen. Weisst du in einem halben Jahr noch, was e, x und y sind?

Verfasst: Donnerstag 3. November 2005, 08:09
von abstract
thanx ! das mit den variablen ist nur zum testen!

aber es scheint nicht an dem global zu liegen sondern scheint mir irgendein bug zu sein.
mach ich das blend file vorher auf und lass dann das skript ohne Blender.Load laufen geht alles wunderbar auch ohne global doc!

will ich das aber alles per batch starten und quasi Blender.Load und dann noch rendern im script dann kommt diese not defined meldung ??
jemand ne idee ?

sollte ich vielleicht 2 skripte ausführen:
1. blend file öffnen
2. skript ausführen ?!

THANXX

Verfasst: Donnerstag 3. November 2005, 23:01
von BlackJack
Joghurt hat geschrieben:Globale Variablen gelten nicht automatisch in Funktionen. Warum das unter SPE geht, weiss ich nicht. Es muss

Code: Alles auswählen

def paul(e,x,y):
  global doc
  for ...
Übrigens ist das schlechter Stil: Globale Variablen sowieso und vor allem die Parameter der Funktion e,x und y zu nennen. Weisst du in einem halben Jahr noch, was e, x und y sind?
Globale Namen sind auch in jeder Funktion "automatisch" sichtbar. Das einzige was man nicht machen kann, ist einen globalen Namen in einer Funktion an ein neues Objekt binden. Dann wird ohne ``global`` nämlich ein neuer Name im Namensraum der Funktion erzeugt und an den gebunden.

Für das Beispiel braucht man ``global`` also nicht.