Strings als Variablennamen hernehmen und auf "None"
Verfasst: Montag 30. Juli 2007, 14:10
Hallo
Ich bin Python-Neuling und rätsele hier etwas rum. Alles Googeln vergrößert nur meine Verwirrung, vor allem, weil ich vermutlich sowieso längst in ganz abwegige Richtungen denke.
Ich habe einen Text, auf dem ich verschiedene re.search() ausführe.
Das sieht zum Beispiel so aus:
Das ganze läuft in einer Schleife, die zeilenweise über den Text iteriert. Nämlich so:
(Nebenbei habe ich da ohnehin etwas Verwunderung gehabt, weil ich aus der RegExp "^" entfernen mußte; irgendwie matchte das nur, wenn es ganz am Anfang im Mailbody stand, am Anfang in der Zeile reichte nicht, trotz zeilenweise Iteration -- das kapiere ich so gar nicht, aber nun gut)
Davon gibts eine ganze Reihe von RegExp-Suchen, womit ich die *short und *full-Variablen befülle.
Nun habe ich eine ganze Reihe solcher Variablen, manche befüllt, manche "None".
Ich möchte herausfinden, welche "None" sind (zu denen soll eine Rückmeldung an den Benutzer erfolgen). Offenbar scheint das kanonisch per Exception gemacht zu werden? Finde ich ja höchst unschön...
Außerdem möchte ich eben nicht jede Variable einzeln im Code abarbeiten, sondern einmal die Variablennamen als String in eine Liste packen. Oder so ähnlich.
Also etwas wie
Tja, nur wie?
Ich dachte so an getattr, aber hatte bislang null Erfolg damit. Mir fehlt einfach das Modul oder Objekt, in dem gesucht werden könnte.
Dinge wie "getattr(globals(), 'frmfull')" funktionieren eben auch nicht. Ebensowenig, wenn ich statt "globals()" den Namen meiner Quelldatei (ohne ".py" angebe -- das ist doch der Modulname?).
Long story short: ich habe keine Ahnung, wie man so etwas in Python anpackt.
(in Common Lisp wäre das so simpel... aber ist es hier vermutlich auch, wenn man nur weiß wie)
Ich bin Python-Neuling und rätsele hier etwas rum. Alles Googeln vergrößert nur meine Verwirrung, vor allem, weil ich vermutlich sowieso längst in ganz abwegige Richtungen denke.
Ich habe einen Text, auf dem ich verschiedene re.search() ausführe.
Das sieht zum Beispiel so aus:
Code: Alles auswählen
mo = re.search("(?:From|Absender):\s?(.*)", line)
if mo is not None:
frmshort = mo.group(1)
frmfull = mo.group()
count += 1
continue
Code: Alles auswählen
for line in email.Iterators.body_line_iterator(posting, decode = True):
Davon gibts eine ganze Reihe von RegExp-Suchen, womit ich die *short und *full-Variablen befülle.
Nun habe ich eine ganze Reihe solcher Variablen, manche befüllt, manche "None".
Ich möchte herausfinden, welche "None" sind (zu denen soll eine Rückmeldung an den Benutzer erfolgen). Offenbar scheint das kanonisch per Exception gemacht zu werden? Finde ich ja höchst unschön...
Außerdem möchte ich eben nicht jede Variable einzeln im Code abarbeiten, sondern einmal die Variablennamen als String in eine Liste packen. Oder so ähnlich.
Also etwas wie
Code: Alles auswählen
for elem in ('frmfull', 'midfull', ...)
checke elem
Ich dachte so an getattr, aber hatte bislang null Erfolg damit. Mir fehlt einfach das Modul oder Objekt, in dem gesucht werden könnte.
Dinge wie "getattr(globals(), 'frmfull')" funktionieren eben auch nicht. Ebensowenig, wenn ich statt "globals()" den Namen meiner Quelldatei (ohne ".py" angebe -- das ist doch der Modulname?).
Long story short: ich habe keine Ahnung, wie man so etwas in Python anpackt.
(in Common Lisp wäre das so simpel... aber ist es hier vermutlich auch, wenn man nur weiß wie)