ネストされたリストを表す文字列があり、それを本物に変換したいとします。私はこれを行うことができたと思います:
exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']"
しかし、ユーザーが文字列を提供して実行する可能性がある環境では、これは悪い考えである可能性があります。同じことを達成する整頓されたパーサーについて誰かが何かアイデアを持っていますか?
ネストされたリストを表す文字列があり、それを本物に変換したいとします。私はこれを行うことができたと思います:
exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']"
しかし、ユーザーが文字列を提供して実行する可能性がある環境では、これは悪い考えである可能性があります。同じことを達成する整頓されたパーサーについて誰かが何かアイデアを持っていますか?
>>> import ast
>>> mylist = ast.literal_eval("['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']")
>>> mylist
['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']
式ノードまたはPython式を含む文字列を安全に評価します。提供される文字列またはノードは、次のPythonリテラル構造のみで構成されます:文字列、数値、タプル、リスト、dict、ブール値、およびなし。
これは、値を自分で解析することなく、信頼できないソースからのPython式を含む文字列を安全に評価するために使用できます。