Variablenliste in Python

  • Code
    source = """
    x = 1
    d = {x: 2}
    y = d[x]
    c= f + 1
    """

    Das Ausführen dieses Codes führt zu einem Fehler, da f nicht deklariert ist, aber ich möchte auch eine Liste von Variablen mit ihren Werten aus der ursprünglichen Zeichenfolge bereitstellen. Ich möchte Ergebnisse wie diese.


    Code
    d {1: 2}
    d[x] 2
    x 1
    y 2
    {x: 2} {1: 2}
    NameError: name 'f' is not defined

    hoffe auf antwort

  • Hallo,


    ich verstehs nicht. Der erste Teil liefert kein Fehler, weil f in einem String ist und im zweiten gibt es kein f. Wie sieht der vollständige Code aus den du laufen lässt?

    Was soll der Code ganz genau machen und zu was ist das gut/notwendig?


    Grüße

    Dennis

    🎧 Mein Herz pumpt nur Adrenalin, ein Feuer tobt tief in mir drin und du, du löscht es mit Benzin 🎧

  • hey got a solution here


    Output:

    Code
    x 1x 1
    d { 1: 2 }
    y 2
    NameError: name 'f' is not defined
    d { 1: 2 }
    d [ x ] 2


    The final line of code, print ( f "d [ x ] locals dict [ 'd' ] [ locals dict [ 'x' ] ], obtains the value of d ) x [, where x already exists and has the value 1.

  • Dieser Benutzer trägt irgendwie nix sinnvolles zu diesem Forum bei. Die Frage ist unverständlich. Auf die Nachfrage wird nicht eingegangen. Der Code im letzten Beitrag — angeblich die Lösung — kommt so nicht einmal am Compiler vorbei, weil da mehrere Syntaxfehler drin sind.


    Wenn man die Syntaxfehler korrigiert und das Programm ausführt, kommt auch nicht die behauptete Ausgabe, sondern eine Ausnahme, die das Programm in Zeile 20 abbricht, weil in Zeile 5 von `source` der Name `f` undefiniert ist:

    Code
    Traceback (most recent call last):
      File "test2.py", line 20, in <module>
        exec ( source, globals_dict, locals_dict )
      File "<string>", line 5, in <module>
    NameError: name 'f' is not defined

    Das ist die einzige Ausgabe, da die `print()`-Aufrufe erst danach kämen. Würde man diese Ausnahme behandeln in dem man sie mehr oder weniger ignoriert, dann läuft man beim erstellen von `var_values` in die nächste Ausnahme, weil beim analysieren vom AST zwar die Zuweisung an `c` gefunden, und damit der Name statisch bekannt ist, aber der Code durch die Ausnahme wegen `f` natürlich nicht so weit kommt, das `c` dann auch definiert wird:

    Code
    Traceback (most recent call last):
      File "test2.py", line 24, in <module>
        var_values = { var_name: locals_dict [ var_name ] for var_name in var_names }
      File "test2.py", line 24, in <dictcomp>
        var_values = { var_name: locals_dict [ var_name ] for var_name in var_names }
    KeyError: 'c'

    Das macht alles wenig bis gar keinen Sinn.

    “Es ist schon über so viele Dinge Gras gewachsen, dass man bald keiner Wiese mehr trauen kann.”