相关疑难解决方法(0)

使用 JSR-223 从 Jython 脚本获取数据

我正在使用 Jython 2.5.1 和 JSR-223(即 javax.script 包),并且我希望返回 Python 脚本的最后一行。例如,评估此脚本后:

class Multiplier:

  def multiply(self, x, y):
    return x * y

Multiplier().multiply(5, 7)
Run Code Online (Sandbox Code Playgroud)

我应该返回 35,但我得到的是 null。另一方面,它与其他测试一起使用:

5 * 7
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

这是 Java 代码:

public static void main(String[] args) throws Exception {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");

    FileReader f = new FileReader("Multiplier.py");
    Object result = engine.eval(f);
    //assert(result == 35);
}
Run Code Online (Sandbox Code Playgroud)

PS:它与 JRuby、Groovy 和 Rhino 一起工作得很好,即总是返回最后一行。

提前致谢。

python java jython jsr223

2
推荐指数
2
解决办法
3739
查看次数

SyntaxError:无效语法,eval()函数中'='的子句

我的程序出现以下问题:

File "C:/Users/6ixpage/Documents/SoftwareDevelopment/Python/Programs/CLI/
PrintandCopy/P&C Job System.py", line 75, in set
     eval('self.details['+a+'].'+b+'"'+c+'"');
File "<string>", line 1
     self.details[0].file = "image"
                          ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

以下是供参考的代码段:

IN = ('details','0','file','image')
if IN[0] == 'details':
    a = IN[1]
    b = IN[2]
    c = IN[3]
    print('self.details['+a+'].'+b+' = "'+c+'"');
    eval('self.details['+a+'].'+b+' = "'+c+'"');
Run Code Online (Sandbox Code Playgroud)
  • IN[0] - 用于标识该命令指定文件夹的详细信息.*
  • IN[1] - 文件夹中的任务.*
  • IN[2] - 任务的属性(任何类型,文件,数量,计数).*
  • IN[3] - 要将属性设置为的值.

整个代码在这里,遗憾的是没有记录,因为我原本只想要一个简单的CUI设置.但如果您对特定片段有任何疑问,请先测试我.我也有纸质文档,它显示了该程序应该如何工作.

如果您可以建议对CUI如何工作进行一些更改,特别是如果它们会比我现在的头疼更少.(而且我确信我不必使用eval()每一个功能.)

python syntax syntax-error python-3.x

1
推荐指数
1
解决办法
1399
查看次数

标签 统计

python ×2

java ×1

jsr223 ×1

jython ×1

python-3.x ×1

syntax ×1

syntax-error ×1