2010-01-29 259 views
2

任何想法? 公共类主要{javax.script.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); 
} 

}

误差是在螺纹

异常 “主” javax.script.ScriptException:语法错误:不匹配的输入 '' 在列在1号线在期望INDENT编号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) 由文件“”,行1 (i)在范围内(10): ^ 语法错误:不匹配输入“”期待INDENT

回答

2

貌似你试图评估该线不完整的语句:

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

在这里,我假设eval()试图这些一个接一个评估,并且在for出错后找不到任何内容,因为这是一个不完整的e声明。试试这个:

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