2010-01-29 3 views
2

Любые идеи? общественного класса Main {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: SyntaxError: несовпадающими вход '' ожидает отступом в на линии № 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): ^ SyntaxError: несовпадающими ввода «» ожидая Отступ

ответ

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.