Das war quick'n'dirty und auf jedenfall kürzer als dein Code Wink
Und die Ersparnis von vielleicht 10 Zeilen spricht nun für locals? Warum benutzt du dann nicht gleich
Code: Alles auswählen
setattr(__builtins__, numeric_to_symbolic[number], eval("type(%s, (Exception,), {})" % numeric_to_symbolic[number])
.
Ich hatte keine Lust die alle selbst einzutippen. Inzwischen hab ich mir den Code einmal komplett generieren lassen und hab nun ein exc Modul wo die ganzen Exceptions drin sind. War mit einem kleinen Skript schnell erledigt und die Lösung ist imho am sinnvollsten.
Codegenerierung ist idR keine gute Idee. Damit machst du Dinge nur unnötig statisch, unanpassbar, unmaintainable weil groß.
Warum willst du es überhaupt statisch haben?
Ist ja nicht so, das ich hier von 400 extra Zeilen spreche.
Wieder jede Menge Code dafür
14 Zeilen? Erzähl mir nicht, deine Ausflüge in die Metaprogrammierung ergaben kürzeres.
Welche vielen Strings?
In parse(). Gut, globals müssens nicht sein, aber locals vielleicht. ":" und " :" sind zb kontextbehaftet, und sowas sollte man imho immer mit einem Variablennamen versehen, der natürlich auch gut benannt ist. Liest sich besser, macht keinen Aufwand und solltest du die Funktion erweitern wollen, ist das auch einfacher. Dann überprüfst du in "to_irc" direkt mit einem hardgecodeten String, ob eben dieser im Dict zu finden ist. Das ist doch wieder vom Kontext komplett losgelöst. Irgendein Dict kommt rein, irgendein hardgecodeter String wird benutzt, der per se mit dem Rest des Programmes höchstens semantisch etwas zu tun hat. Sowas gehört imho in globale Variablen.
Ja. damit werden die Nachrichten voneinander getrennt, dafür brauche ich aber keine Konstante. Das wäre ja als ob man sich SQL Strings selbst zusammensetzt.
Rein prinzipiell würde ich für sowas Konstanten benutzen. Aus oben genannten Gründen. Was du da machst, ist (wenn im größeren Stil eingesetzt) in etwa so, wie jeden String aus Gründen des Speichersparens in einem Programm komplett auszuschreiben, nur weil man weiß, das höchstwahrscheinlich keine anderen Strings irgendwo ankommen. Oder überall lambda Statements statt Funktionen und die auch nicht in Variablen festzuhalten. Klingt jetzt extrem, aber so rein prinzipiell...