2010-01-29 2 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)전 범위에 대해 파일 ","1 라인 (10) : javax.script.AbstractScriptEngine.eval (AbstractScriptEngine.java:247) javaapplication2.Main.main (Main.java:23) 에서 에 의해 인한 ^ 구문 에러 : 여기

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

, 내가 eval()이 하나씩을 평가하려고하는 가정 : 당신이 선에서 불완전 문을 평가하기 위해 노력하고있다처럼 INDENT

답변

2

를 기대 일치하지 않는 입력은 '보이는 , 불완전하기 때문에 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 파일에서 읽는 것입니다.