Pythonを使って文字列内にある変数に値を代入したい
そう仮定します
y = 'x = 5'
eval(y) # does not work
この式を評価するものが欲しいのでx = 5
、Pythonで
Pythonを使って文字列内にある変数に値を代入したい
そう仮定します
y = 'x = 5'
eval(y) # does not work
この式を評価するものが欲しいのでx = 5
、Pythonで
exec
代わりに試してください:
In [8]: y = 'x = 5'
In [9]: exec(y)
In [10]: x
Out[10]: 5
ただし、と同様にeval
、ここにはセキュリティ上の懸念があると思います(たとえば、この記事を参照)。したがって、可能であれば、別の角度からアプローチすることをお勧めします。なぜeval
うまくいかないのかというと、Python式のように文字列を評価しているからです。したがって、と言うとx = 5
、結果は返されません。exec
一方、ステートメントを実行し、この場合はx = 5
プログラムに設定されます。
exec
これには次のステートメントを使用できます。
exec y
(Python 3 では、ステートメントではなく関数です。)
ただし、おそらくそうすべきではありません。ユーザー入力テキストでこれを行うと、セキュリティ上のリスクが生じます。また、コードを実行するスコープによっては、予期しないこともできます。詳細については、ドキュメントを参照してください。通常、やりたいことを行うには、 を使用するよりも良い方法がありますexec
。
を探していexec
ます。
y = 'x = 5'
exec(y)
print x