开发者

javax.script.ScriptEngine fails at runtime

Any ideas? public clas开发者_JS百科s 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);
}

}

error is

Exception in thread "main" javax.script.ScriptException: SyntaxError: mismatched input '' expecting INDENT in at line number 1 at column number 18 at org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:170) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:76) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:33) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) at javaapplication2.Main.main(Main.java:23) Caused by: File "", line 1 for i in range(10): ^ SyntaxError: mismatched input '' expecting INDENT


Looks like you are trying to evaluate an incomplete statement in the lines:

engine.eval("for i in range(10):");
engine.eval("   hello_str += str(i)");

Here, I assume eval() is trying to evaluate these one-by-one, and finding nothing after the for is erroring out since that is an incomplete statement. Try this:

engine.eval("for i in range(10):\n   hello_str += str(i)");

The newline is not necessary in this case, but it would be if you want to include several statements in the loop body, eg:

engine.eval("for i in range(10):\n   hello_str += str(i)\n   print i");

Also note that in the example above the amount of spacing after each new line should be equal. In fact, I would suggest assembling the script string completely before evaluating it. Or better yet, read it from a separate .py file.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜