我试图使用Jython从Java中运行一段Python。如果使用exec语句导入,则一切正常。
PythonInterpreter pi = new PythonInterpreter();
pi.exec("import re");
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // returns a MatchObject
o = pi.eval("re.match('abc', 'def123')"); // returns Py.None
然而,如果我试着把这两条线结合起来,一切都会失控。这:
PythonInterpreter pi = new PythonInterpreter();
pi.eval("import re"); // exception!
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // never gets here
o = pi.eval("re.match('abc', 'def123')"); // ....
…引发异常"no viable alternative at input 'import'", ('<string>',1,0,'import re\n')
。
这很重要,因为理想情况下,我希望能够将整个脚本作为单个字符串进行求值,而不必将导入拆分为单独的部分。我做错什么了吗?有没有其他方法告诉Jython“获取整个脚本块(包括导入)并运行它,然后返回结果”?这需要在运行时——将Python预编译成.class
文件不是一个选项。
你说结果是什么意思?
我假设这是你剧本的计算值。根据exec的文档,代码在当前范围内运行。因此,您必须能够访问在exec语句中创建的任何新符号的值。
上面的代码应该打印30。
试试这个
问题是eval计算表达式并返回一些结果,而exec在某些上下文中执行语句。import是一个语句,而re.match()是一个表达式。
相关问题 更多 >
编程相关推荐