javax.script.ScriptEngine在运行时失败
有什么想法吗? 公共班机{javax.script.ScriptEngine在运行时失败,java,python,scriptengine,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("
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中出现异常:语法错误:输入“”不匹配,应在第1行第18列处缩进
位于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)内的i:
^
SyntaxError:不匹配的输入“”,需要缩进,看起来您试图计算以下行中的不完整语句:
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文件中读取它