Ironpython 是否在访问不存在的方法或属性后继续?

Ironpython 是否在访问不存在的方法或属性后继续?,ironpython,Ironpython,有没有办法让托管的IronPython引擎在访问对象实例的不存在的方法或属性后恢复脚本的执行?通常会抛出一个异常,不幸地中断了脚本的执行 我在IronPython脚本的作用域中使用几个不同C#类(例如,类A和B)的实例执行IronPython脚本,这些类或多或少实现了相同的方法和属性。然而,除了两个类共享的方法和属性之外,类A实现了更多的方法和属性 类A可能并且应该继续包含异常,因为脚本访问的此类的方法必须存在。如果他们不这样做的话,剧本确实有问题 然而,类B仅用于可视化,因此IronPytho

有没有办法让托管的IronPython引擎在访问对象实例的不存在的方法或属性后恢复脚本的执行?通常会抛出一个异常,不幸地中断了脚本的执行

我在IronPython脚本的作用域中使用几个不同C#类(例如,类A和B)的实例执行IronPython脚本,这些类或多或少实现了相同的方法和属性。然而,除了两个类共享的方法和属性之外,类A实现了更多的方法和属性

类A可能并且应该继续包含异常,因为脚本访问的此类的方法必须存在。如果他们不这样做的话,剧本确实有问题

然而,类B仅用于可视化,因此IronPython可以忽略/跳过对类A中不存在的方法的调用,并继续执行


有什么想法吗?非常感谢

从DynamicObject继承类B,将dynamic用作运行脚本的方法的参数类型,并在类B中执行此操作

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        base.TryInvokeMember(binder, args, out result);
        return true;
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        base.TryInvoke(binder, args, out result);
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        base.TryGetMember(binder, out result);
        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        base.TrySetMember(binder, value);
        return true;
    }

我可以实现我的要求。以这种方式忽略对不存在的方法或属性的每次调用。无论电话来自何方。但是,对现有方法/属性的调用照常工作

从DynamicObject继承类B,将dynamic用作运行脚本的方法的参数类型,并在类B中执行此操作

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        base.TryInvokeMember(binder, args, out result);
        return true;
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        base.TryInvoke(binder, args, out result);
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        base.TryGetMember(binder, out result);
        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        base.TrySetMember(binder, value);
        return true;
    }
我可以实现我的要求。以这种方式忽略对不存在的方法或属性的每次调用。无论电话来自何方。但是,对现有方法/属性的调用照常工作