有什么想法吗? 公共课主要{
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
答案 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文件中读取它。