首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GroovyShell.evaluate时跳过MissingPropertyException

使用GroovyShell.evaluate时跳过MissingPropertyException
EN

Stack Overflow用户
提问于 2021-11-03 16:27:44
回答 2查看 45关注 0票数 1

有没有办法在使用GroovyShell.evaluate时跳过MissingPropertyException

代码语言:javascript
复制
def sharedData = new Binding()
def shell = new GroovyShell(sharedData)
shell.evaluate("a=5; b=1") // works fine

// How to not get MissingPropertyException, or silently ignore property 'a'
shell.evaluate("a; b=1") // MissingPropertyException for 'a'

我知道Expando解决方案,有没有一种不定义类的方法?

EN

回答 2

Stack Overflow用户

发布于 2021-11-03 17:49:30

一种非常简单的方法是覆盖Binding.getVariable。请注意,这非常简单:“所有异常”都被忽略--您可能希望有更好的日志记录或更准确的错误处理。

代码语言:javascript
复制
import groovy.lang.*

class NoOpBinding extends Binding {
    @Override
    Object getVariable(String name) {
        try {
            return super.getVariable(name)
        }
        catch (Throwable t) {
            println "Ignoring variable=`$name`"
            return null
        }
    }
}

def shell = new GroovyShell(new NoOpBinding())
shell.evaluate("a; b=1") // MissingPropertyException for 'a'
// → Ignoring variable=`a`
println shell.getVariable('b')
// → 1
票数 0
EN

Stack Overflow用户

发布于 2021-11-04 00:02:50

你可以这样做:

代码语言:javascript
复制
def binding = [:].withDefault { }
def shell = new GroovyShell(binding as Binding)

shell.evaluate 'a; b=1'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69828430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档