3

我正在尝试创建通用异常处理程序 - 我可以设置一个 arg 以在异常情况下返回,灵感来自这个答案

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()
4

1 回答 1

3

主要的概念问题是您试图使调用函数从被调用函数中隐式返回一个值。举个例子,你试图做的在概念上等同于这种情况:

def f():
    # some magic code here

def g():
    f()

现在你想让魔法代码g()返回一些值。这永远行不通。

上下文管理器是用于此目的的错误工具。考虑改用装饰器。

于 2012-11-03T22:58:14.277 回答