阎兆珣 wrote:
>Excuse me for the same problem in Python 3.4.2-32bit
>
>I just discovered that function does not necessarily take the
>string input and transfer it to a command to execute.
>
>So is there a problem with my assumption?
Python discriminates between statements and expressions. The eval function
will only accept an expression. OK:
>>> eval("1 + 1")
2
>>> eval("print(42)") # Python 3 only; in Python 2 print is a statement
42
>>> x = y = 1
>>> eval("x > y")
False
Not acceptable:
>>> eval("1+1; 2+2")
Traceback (most recent call last):
File "", line 1, in
File "", line 1
1+1; 2+2
^
SyntaxError: invalid syntax
>>> eval("import os")
Traceback (most recent call last):
File "", line 1, in
File "", line 1
import os
^
SyntaxError: invalid syntax
>>> eval("if x > y: print(42)")
Traceback (most recent call last):
File "", line 1, in
File "", line 1
if x > y: print(42)
^
SyntaxError: invalid syntax
To import a module dynamically either switch to exec()
>>> exec("import os")
>>> os
or use the import_module() function:
>>> import importlib
>>> eval("importlib.import_module('os')")
Of course you can use that function directly
>>> importlib.import_module("os")
and that's what you should do if your goal is to import a module rather than
to run arbitrary Python code.
--
https://mail.python.org/mailman/listinfo/python-list