2010-01-29 256 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文件中讀取它。