有任何想法吗?
公共班级主要{
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);
}
}
错误是
线程“主” javax.script.ScriptException中的异常:SyntaxError:输入不匹配”期望第1行第18列的索引为INDENT
在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行
对于我在范围(10)中:
^
语法错误:输入不匹配”预期为INDENT
最佳答案
看起来您正在尝试评估以下各行中的不完整语句:
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文件中读取它。
关于java - javax.script.ScriptEngine在运行时失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2159273/