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.
hoffe auf antwort
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.
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
hey got a solution here
import ast
source = """
x = 1
d = { x: 2 }
y = d [ x ]
c = f + 1
"""
# parse the source code and retrieve all variable names
tree = ast.parse ( source )
var_names = [ node.targets [ 0 ] .id for node in tree.body if isinstance ( node, ast.Assign ) for target in node.targets ]
# execute the source code and keep track of variable values
globals_dict = { }
locals_dict = { }
exec ( source, globals_dict, locals_dict )
var_values = { var_name: locals_dict [ var_name ] for var_name in var_names }
# print the variable names and their values
for var_name, var_value in var_values.items ( ):
print ( f "{ var_name } { var_value }" )
# print specific variable values
print ( f "d { locals_dict [ 'd' ] }" )
print ( f "d [ x ] { locals_dict [ 'd' ] [ locals_dict [ 'x' ] ] "}"
Display More
Output:
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:
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:
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.