Ich versuche zu verhindern, eval
basierend auf einem Beispiel how-to-avoid-eval-in-python-for-string-conversion mit ast
zu verwenden. Die Herausforderung ist, dass es ein Dutzend dieser self.ch%s_label
's zu machen gibt, aber die Variable für es ändert sich basierend auf Benutzereingabe in der GUI.Python/Pyqt5 - wie Eval zu vermeiden, während mit ast und erhalten ValueError: fehlerhafte Zeichenfolge in Versuch, die Sicherheit des Codes zu verbessern
Mein Code:
import ast ...etc.
....
channel_no += 1
ch_width = eval('self.ch%s_label.frameGeometry().width()' % (channel_no))
Wenn ich es in ändern:
ch_width = ast.literal_eval('self.ch%s_label.frameGeometry().width()' % (channel_no))
Ich werde den Fehler:
File "c:\python\anac2\lib\ast.py", line 80, in literal_eval return _convert(node_or_string) File "c:\python\anac2\lib\ast.py", line 79, in _convert raise ValueError('malformed string') ValueError: malformed string
Ändern des Codes (mit Schließen "„) Behält den Fehler:
ch_width = ast.literal_eval("'self.ch%s_label.frameGeometry().width()' % (channel_no)")
Welche anderen Optionen gibt es ... Irgendwelche Vorschläge?
@ snakecharmerb .. danke für das klare Beispiel der Verwendung von "getattr". Ich habe "functools partially" vertieft, aber das ist viel mehr Python mit dem eingebauten Standard-Code. Prost. ... und es funktioniert natürlich :-) – ZF007