python什么情况下要加eval,为什么必须“执行”? (而不是“ eval”)用于Python导入语句?...

I'm trying to run a snippet of Python from within Java, using Jython. If I use an exec statement to import, everything works.

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

If, however, I try to combine the two lines, all hell breaks loose. This:

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')"); // ....

...throws an exception "no viable alternative at input 'import'", ('',1,0,'import re\n').

This matters, because ideally I'd like to be able to eval a whole script as a single string, without having to break the imports out into a separate part. Am I doing something wrong? Is there another way to tell Jython "take this whole blob of script, including imports, and run it, then give me back a result"? This needs to be at runtime -- pre-compiling the Python into .class files is not an option.

解决方案

The problem is that eval evaluates expressions and returns some result, while exec executes statements in some context. import is a statement, while re.match() is an expression.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值