2

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

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:不匹配的输入''在 org.python 的 org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:170) 的 org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:170) 的第 18 列第 1 行期待 INDENT .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): ^ SyntaxError: mismatched input '' Expecting INDENT

4

1 回答 1

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

于 2010-01-29T01:24:21.633 回答