10

As you see, ifinner is a string, so if I just write after if, always will be true. What can i do, to concert it to source code?

    x=2
    ifinner = "x==3"
    if ifinner:
        print("Yeah")
    else:
        print("It works!")
Erik A
  • 31,639
  • 12
  • 42
  • 67
Turcsi
  • 145
  • 1
  • 2
  • 5
  • You should parse the string and handle the different conditional options – b-fg May 09 '17 at 19:42
  • 1
    Any particular reason you're not doing `ifinner = x == 3`, which works in your example? – Kevin May 09 '17 at 19:42
  • 1
    In the real situation, where is the string coming from? – jonrsharpe May 09 '17 at 19:45
  • Possible duplicate of [How do I execute a string containing Python code in Python?](https://stackoverflow.com/questions/701802/how-do-i-execute-a-string-containing-python-code-in-python) – jpyams Oct 14 '17 at 13:41

3 Answers3

20

You can use eval() function to evaluate Python source code.

Quoting the documentation:

eval(expression, globals=None, locals=None)

The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object.

Laurent LAPORTE
  • 21,958
  • 6
  • 58
  • 103
2

Try this:

exec ("%s == 3" % x)

For detailed info, read the documentation of eval and exec in python 2.x/3.x. A similar question was asked previously.Here's the link

Community
  • 1
  • 1
Bilal Ch
  • 358
  • 4
  • 15
2

I think eval does not work with strings like this

str_ = "import matplotlib"

in that case you might have to open a separate file, write the string and then execute it.

Henry Ecker
  • 34,399
  • 18
  • 41
  • 57
peter
  • 104
  • 8
  • 1
    you can use `exec` for this string. For example try the following `exec( "import matplotlib.pyplot as mp" ); mp.plot([1,2,3],[-1,0,1]); mp.show()` no error. But you are right that `eval` is not suitable for this string. – AmirHosein Sadeghimanesh Jun 10 '22 at 11:10