2

ジェネレーターで throw を呼び出すと、例外の型が発生するようです。(すでにキャッチした) 例外のインスタンスを再スローするにはどうすればよいですか?

編集:考慮してください

def g():
    try:
        yield 1
    except Exception as e:
        yield 2

def f():
   x = g()
   print x.next()
   print x.throw(Exception)

しかし、既に存在する例外のインスタンスをスローするにはどうすればよいでしょうか?

4

1 に答える 1

4

ステートメントへの引数をgenerator.throw(...)正確に反映するための引数。したがって、例外クラスであるraise必要はありませんと同じように、例外オブジェクトにすることができますraise

これは完全にうまくいきます:

x.throw(Exception("i'm an argument"))

ドキュメントは、確かに、これに関して非常に誤解を招くものです。 PEPは少なくともヒントを与えてくれます:

例外を発生させる効果は、次のステートメントとまったく同じです。

raise type, value, traceback

サスペンションポイントで実行されました。

于 2013-04-14T20:17:06.990 に答える