2

何か案は?パブリッククラスメイン{

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:SyntaxError:不一致入力'' org.pythonのorg.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:170)の行番号1の行番号1にINDENTが必要です。 .jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:76)at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:33)at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)atjavaapplication2.Main。 main(Main.java:23)原因:ファイル ""、範囲(10)のiの1行目:^構文エラー:入力が一致していません''INDENTが必要です

4

1 に答える 1

2

次の行の不完全なステートメントを評価しようとしているようです。

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

ここで、eval()がこれらを 1 つずつ評価しようとしていると仮定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 ファイルから読み取ることをお勧めします。

于 2010-01-29T01:24:21.633 に答える