被调用者是否可以强制其调用者返回python?
如果是这样,这是一个好方法吗?它违反显式比隐式更好吗? Zen of Python的句子?

例:

import inspect

class C(object):
    def callee(self):
        print 'in callee'
        caller_name = inspect.stack()[1][3]
        caller = getattr(self, caller_name)
        # force caller to return
        # so that "in caller after callee" gets never printed

        caller.return() # ???

    def caller(self):
        print 'in caller before calle'
        self.callee()
        print 'in caller after callee'

c = C()

c.caller()

print 'resume'


输出:

in caller before callee
in callee
resume


最后,由于@Andrew Jaffe对上下文管理器的建议,我用一个简单的装饰器解决了它。

# In my real code this is not a global variable
REPORT_ERRORS = True

def error_decorator(func):
    """
    Returns Event instance with result of the
    decorated function, or caught exception.
    Or reraises that exception.
    """

    def wrap():
        error = None
        user = None

        try:
            user = func()
        except Exception as e:
            error = e
        finally:
            if REPORT_ERRORS:
                return Event(user, error)
            else:
                raise error
    return wrap


@error_decorator
def login():

    response = fetch_some_service()

    if response.errors:
        # flow ends here
        raise BadResponseError

    user = parse_response(response)

    return user

最佳答案

从被调用者返回一个要由调用者读取并因此相应地执行操作的值有什么问题?

代替

caller.return() # ???




return False


和在

def caller(self):
        print 'in caller before calle'

        rc = self.callee()
        if not rc:
             return
        print 'in caller after callee'


当然,您可以引发异常并在被调用者中捕获异常并相应地进行操作,或者只是减少异常的发生

吉尔森的副本

我主张基于返回值的检查的原因


Explicit is better than implicit
被呼叫者不应控制呼叫者行为。这是不好的编程习惯。相反,呼叫者应根据被呼叫者的行为更改其行为。

关于python - 被调用者是否可以强制其调用者返回python?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14522757/

10-12 23:25