【问题标题】:javax.script.ScriptEngine fails at runtimejavax.script.ScriptEngine 在运行时失败
【发布时间】:2010-01-29 01:15:04
【问题描述】:

有什么想法吗? 公共类主 {

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: mismatched input '' expecting INDENT in at line number 1 at column number 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 行 对于范围内的 i (10): ^ SyntaxError: 不匹配的输入 '' 期望 INDENT

【问题讨论】:

    标签: java python scriptengine


    【解决方案1】:

    看起来您正在尝试评估以下行中的不完整语句:

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

    在这里,我假设 eval() 正在尝试逐一评估这些,并且在 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 文件中读取它。

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 2021-12-03
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多