我試圖防止使用eval
基於示例how-to-avoid-eval-in-python-for-string-conversion使用ast
。挑戰在於有十二個這樣的self.ch%s_label
被創建,但它的變量根據GUI中的用戶輸入而改變。python/Pyqt5 - 如何避免使用ast和獲取ValueError時的eval:試圖提高代碼安全性時使用格式錯誤的字符串
我的代碼:
import ast ...etc.
....
channel_no += 1
ch_width = eval('self.ch%s_label.frameGeometry().width()' % (channel_no))
當我把它變成:
ch_width = ast.literal_eval('self.ch%s_label.frameGeometry().width()' % (channel_no))
我會得到錯誤:
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
更改代碼(使用關「「)保留錯誤:
ch_width = ast.literal_eval("'self.ch%s_label.frameGeometry().width()' % (channel_no)")
還有什麼其他選擇...有什麼建議嗎?
@ snakecharmerb ..感謝您使用'getattr'的明確例子。我正在深入討論'functools partial',但是這使用默認的內置代碼更加pythonic。乾杯。 ...它的工作原理是:-) – ZF007