javax.script.ScriptEngine在运行时失败

时间:2010-01-29 01:15:05

标签: java python scriptengine

有什么想法吗? 公共课主要{

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:SyntaxError:不匹配的输入''期望第1列第1行的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):                      ^ SyntaxError:不匹配的输入''期待INDENT

1 个答案:

答案 0 :(得分:2)

看起来你正在尝试评估一行中不完整的陈述:

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文件中读取它。