被调用者是否可以强制其调用者返回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/