taake hat geschrieben:Auch wenn ich ehrlich gesagt nicht wirklich weiß wieso das mit eval() klappt
So funktioniert Programmieren nicht, man rät nicht so lange rum, bis man eine scheinbar funktionierende Lösung gefunden hat. Wenn man etwas nicht versteht, dann ist dort garantiert noch irgendwo ein Fehler eingebaut.
taake hat geschrieben:aber sollte an dieser Stelle wohl ungefährlich sein.
Ein eval auf Daten, welche aus einer Datei stammen, ist wohl so mit das gefährlichste was man mit eval anstellen kann. Da kann doch nun wirklich alles drin stehen!
Auch dein gezeigter Code ist grauenhaft. Der Funktionsname sagt nichts über die Funktion aus und hält sich kein Stück an PEP 8. Vielleicht als grobe Richtlinie: wenn in einem Funktionsnamen kein Verb vorkommt, dann ist der Name schlecht gewählt. Funktionen beschreiben (in der Regel) Tätigkeiten, das sollte der Name auch zeigen.
Dein try/except-Block ist eine ganz schlechte Idee. Damit werden alle Fehler abgefangen, welche in dem try-Block auftreten können. Du hast dort (nach deinem Verständnis des Codeablaufs) sogar einen Fehler eingebaut, welchen du so nie entdecken würdest. Bei einem except muss immer stehen welche Excpetions abgefangen werden sollen, sonst baut man sich schwer auffindbare Probleme ein.
Der oben angesprochene Fehler träte bei dem close auf, wenn der Code so ablaufen würde, wie du es vermutest. Allerdings wird der Code nie erreicht, da vorher das return ausgeführt wird. lines ist ein String (nicht einmal eine Liste, wie der Name impliziert!) und hat keine close-Methode. Würde die Zeile erreicht werden, dann würde der except-Block ausgeführt, obwohl die Daten in Ordnung sind. Nur durch Zufall funktioniert dein Code.
Natürlich wird dadurch die geöffnete Datei nie geschlossen, daher solltest du zum Öffenen das with-Statement verwenden. Dann kann man solche Dinge nicht mehr vergessen
Als letzter Punkt fällt noch auf, dass CHOISE_FALLBACK nicht viel mit Englisch zu tun hat. Hier wäre vielleicht auch eine Exception angebracht. Das hängt aber von der Funktion ab.
Zeig doch mal deinen json-Code. Damit lässt sich sicher eine vernünftige Lösung finden.
Das Leben ist wie ein Tennisball.