gpt4 book ai didi

python - 为什么必须将 "exec"(而不是 "eval")用于 Python 导入语句?

转载 作者:太空狗 更新时间:2023-10-29 17:25:58 27 4
gpt4 key购买 nike

我正在尝试使用 Jython 从 Java 中运行一段 Python。如果我使用 exec 语句导入,一切正常。

PythonInterpreter pi = new PythonInterpreter();
pi.exec("import re");
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // returns a MatchObject
o = pi.eval("re.match('abc', 'def123')"); // returns Py.None

但是,如果我尝试将这两条线结合起来,一切都会变得一团糟。这:

PythonInterpreter pi = new PythonInterpreter();
pi.eval("import re"); // exception!
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // never gets here
o = pi.eval("re.match('abc', 'def123')"); // ....

...抛出异常 "no viable alternative at input 'import'", ('<string>',1,0,'import re\n') .

这很重要,因为理想情况下,我希望能够将整个脚本作为单个字符串进行评估,而不必将导入分解为单独的部分。难道我做错了什么?有没有另一种方法告诉 Jython “获取整个脚本 block ,包括导入,并运行它,然后返回结果”?这需要在运行时——将 Python 预编译为 .class文件不是一个选项。

最佳答案

问题在于 eval 计算表达式返回一些结果,而 exec 执行语句 在某些情况下。 import 是一个语句,而 re.match() 是一个表达式。

关于python - 为什么必须将 "exec"(而不是 "eval")用于 Python 导入语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com