javax.script.ScriptEngine 在运行时失败
有什么想法吗?
这是一个简单的Java程序:
public class Main {
public static void main(String[] args) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
engine.put("hello_str", "");
engine.eval("for i in range(10):");
engine.eval(" hello_str += str(i)");
Object x = engine.get("hello_str");
System.out.println("x: " + x);
}
}
但是它出现了一个错误:
在“main”线程中发生异常,错误信息是:javax.script.ScriptException: 语法错误:输入不匹配,期望缩进,在第1行第18列。
这个错误的详细信息是:
在org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:170)中
在org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:76)中
在org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:33)中
在javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)中
在javaapplication2.Main.main(Main.java:23)中
引起这个错误的原因是:文件“”,第1行
for i in range(10):
^
语法错误:输入不匹配,期望缩进。
1 个回答
看起来你在尝试执行一个不完整的语句,出现在以下代码行中:
engine.eval("for i in range(10):");
engine.eval(" hello_str += str(i)");
在这里,我假设 eval()
是在逐个执行这些语句,但在 for
后面找不到任何内容就出错了,因为这是一条不完整的语句。你可以试试这个:
engine.eval("for i in range(10):\n hello_str += str(i)");
在这种情况下,换行符并不是必须的,但如果你想在循环体内包含多个语句,那就需要换行,比如:
engine.eval("for i in range(10):\n hello_str += str(i)\n print i");
另外要注意,上面例子中每个换行后的空格数量应该是相等的。实际上,我建议在执行之前先把整个脚本字符串组装好。更好的方法是从一个单独的 .py 文件中读取它。