[Python] Variablen in String ersetzen



  • Ich möchte vom Nutzer einen String entgegennehmen, der zB so aussehen kann:

    "name == 'Hubert' and x < 42"

    Nun möchte ich in diesem String alle "Unbekannten" suchen, ersetzen uind dann den Ausdruck auswerten. Im Beispiel wären die Unbekannten "name" und "x". Ich gehe nicht davon aus, dass gleichnamige Variablen vorliegen (dann würde es ein einfaches eval tun), aber es gibt eine Funktion, die zu einem Variablennamen einen Wert generieren kann.
    Wie kann man das einfach erledigen? In einer früheren Version meines Skripts hatte ich das mit dem AST Modul und einem TreeWalker gemacht, aber das erscheint mir ein wenig zu umständlich (und um ehrlich zu sein, verstehe ich meinen alten Code nciht mehr 😉


  • Global Moderator |  Mod

    Warum sind denn in dem String name und x die Unbekannten und nicht etwa 'Hubert', <, oder gar ert' an? Erklär es nicht mir, sondern leg grammatikalische Regeln fest. Also eine Syntax. Und damit bist du wieder bei einem AST Parser als bester Möglichkeit, sofern diese Regeln auch nur einigermaßen Tiefgang haben. So wie dein Beispiel aussieht, haben deine Regeln einigermaßen Tiefgang. Praktischerweise sieht es so aus, als seien deine Regeln die gleichen wie von Python, von daher musst du ja nicht einmal selber etwas machen, sondern kannst die fertigen Regeln in Pythons AST Modul benutzen.