'Read input expressions, and provide a handler for ``satisfy``
that blocks further propagation of the ``Undefined`` error.
:param expr: An ``Expression`` of ``logic``.
:type g: Assignment
:param g: an assignment to individual variables.
:rtype: bool or \'Undefined\''

def evaluate(self, expr, g, trace=None):

    try:
        parsed = Expression.fromstring(expr)
        value = self.satisfy(parsed, g, trace=trace)
        if trace:
            print()
            print((u"'%s'    evaluates    to    %s    under    M,    %s" % (expr, value, g)))
        return value
    except Undefined:
        if trace:
            print()
            print((u"'%s'    is    undefined    under    M,    %s" % (expr, g)))
        return u'Undefined'
