有任何想法吗?
公共班级主要{

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/

10-09 01:33