3

私は一般的な例外ハンドラーを作成しようとしています-この回答からインスピレーションを得て、例外の場合に返す引数を設定できる場所。

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 に答える