gpt4 book ai didi

python - 被调用者是否有可能强制其调用者在 python 中返回?

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:27 24 4
gpt4 key购买 nike

被调用者是否可以强制其调用者在 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'

当然你可以引发异常并在被调用者中捕获它并相应地表现或者简单地减少它失败

mgilson 的副本

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

  1. 显式优于隐式
  2. 被调用者不应控制调用者行为。这是一种糟糕的编程习惯。相反,调用者应该根据被调用者的行为改变其行为。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com