XML parsen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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"):

-------------------
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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?
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

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
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.
Antworten