Seite 1 von 1
NameError uebreschreiben
Verfasst: Sonntag 2. März 2008, 15:11
von Costi
bei einer undefinierten variable soll erstmal kein NameError geraist werden, sondern eine andere quelle (ausser dem namespace) nach der variable gefragt werden.
wie implementiere ich sowas?
danke
Verfasst: Sonntag 2. März 2008, 15:45
von Zap
So zum Beispiel:
Code: Alles auswählen
try:
var = unknown
except NameError:
var = somewhere.var
Verfasst: Sonntag 2. März 2008, 15:50
von Costi
ups,
hab vergessen zu sagem dass dies mit JEDER variable geschehen soll
und ich habe keine lust fuer alle variablen eine try-except klausel zu schreiben
Verfasst: Sonntag 2. März 2008, 15:56
von EyDu
Gib doch mal ein wenig Kontext an, denn auf NameErrors auf Grund von nicht vorhandenen Variablen ist kein guter Stil. Wahrscheinlich benötigst du einfach nur eine geeignetere Datenstruktur.
Verfasst: Sonntag 2. März 2008, 16:20
von Costi
man soll eine variable, die in einem prozess ist auf einem anderen prozess uebrtragen koennen
hier etwas pseudo code
Code: Alles auswählen
def on_name_error(varname):
mysocket.send('GIMMI: ' + varname)
resp = mysocket.recv(1024*5)
return marshal.loads(resp)
und dann:
Code: Alles auswählen
if os.fork():
enable_server()
myvar = 2
else:
sleep(1)
enable_client()
print myvar
Verfasst: Sonntag 2. März 2008, 17:40
von audax
Kapsel es in eine Klasse und schreib dir dort nen getter.
Verfasst: Sonntag 2. März 2008, 17:52
von sma
Lokale und globale Variablen werden intern in dict-Objekten gespeichert. Da kann man auch eigene dict-artige Objekte benutzen, die sich anders verhalten. Dort wo `return 42` steht, könntest auch IPC stattfinden.
Code: Alles auswählen
class d(dict):
def __getitem__(self, name):
try: return dict.__getitem__(self, name)
except KeyError: return 42
exec "print a + b" in d(a=3)
Stefan