11

ネストされたリストを表す文字列があり、それを本物に変換したいとします。私はこれを行うことができたと思います:

exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']"

しかし、ユーザーが文字列を提供して実行する可能性がある環境では、これは悪い考えである可能性があります。同じことを達成する整頓されたパーサーについて誰かが何かアイデアを持っていますか?

4

1 に答える 1

28
>>> import ast
>>> mylist = ast.literal_eval("['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']")
>>> mylist
['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']

ast.literal_eval

式ノードまたはPython式を含む文字列を安全に評価します。提供される文字列またはノードは、次のPythonリテラル構造のみで構成されます:文字列、数値、タプル、リスト、dict、ブール値、およびなし。

これは、値を自分で解析することなく、信頼できないソースからのPython式を含む文字列を安全に評価するために使用できます。

于 2009-12-18T07:00:52.330 に答える