Pythonでは、try-except
ブロック内でyield
を使用することができます。これは、ジェネレータ関数内でエラーを処理しながら値を生成するための一般的なパターンです。
以下に、このパターンの基本的な例を示します。
def f(n):
for i in range(n):
try:
if i == 3:
raise ValueError('hit 3')
yield i
except ValueError:
print("Error with key: {}".format(i))
この関数f
は、0からn-1
までの整数を生成します。ただし、i
が3のときにはValueError
を発生させます。このエラーはtry-except
ブロック内で捕捉され、エラーメッセージが出力されます。その後、ループは次の値を生成するために続行します。
このように、try-except
ブロック内でyield
を使用することで、ジェネレータ関数がエラーを適切に処理しながら値を生成することが可能になります。これは、ジェネレータ関数が外部リソース(ファイル、ネットワーク接続など)を扱う場合や、エラーが予想される操作を行う場合に特に有用です。