我正在尝试创建通用异常处理程序 - 我可以设置一个arg,以便在异常的情况下返回,灵感来自this answer。
import contextlib
@contextlib.contextmanager
def handler(default):
try:
yield
except Exception as e:
yield default
def main():
with handler(0):
return 1 / 0
with handler(0):
return 100 / 0
with handler(0):
return 'helllo + 'cheese'
但这会导致
RuntimeError: generator didn't stop after throw()
答案 0 :(得分:3)
主要的概念问题是你试图使调用函数隐式地从被调用函数中返回一个值。举个例子,你想要做的是巧妙地等同于这种情况:
def f():
# some magic code here
def g():
f()
现在你想要魔术代码让g()
返回一些值。这永远不会起作用。
上下文管理器是用于此目的的错误工具。请考虑使用装饰器。