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 :lol:

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