gpt4 book ai didi

python - 在生成器中捕获异常时保持 try block 较小

转载 作者:太空狗 更新时间:2023-10-30 01:02:47 27 4
gpt4 key购买 nike

当我必须捕获生成器中可能发生的异常时,如何使 try block 尽可能小?

典型的情况是这样的:

for i in g():
process(i)

如果 g() 可以引发我需要捕获的异常,第一种方法是这样的:

try:
for i in g():
process(i)
except SomeException as e:
pass # handle exception ...

但是如果它发生在 process(i) 中,这也会捕获 SomeException(这是我不想要的)。

是否有处理这种情况的标准方法?某种模式?

我正在寻找的是这样的:

try:

for i in g():

except SomeException as e:
pass # handle exception ...

process(i)

(但这当然是句法上的废话。)

最佳答案

您可以转换发生在内部 block 中的异常:

class InnerException(Exception):
pass

try:
for i in g():
try:
process(i)
except Exception as ex:
raise InnerException(ex)
except InnerException as ex:
raise ex.args[0]
except SomeException as e:
pass # handle exception ...

另一种选择是编写一个包装g的本地生成器:

def safe_g():
try:
for i in g():
yield i
except SomeException as e:
pass # handle exception ...
for i in safe_g():
process(i)

关于python - 在生成器中捕获异常时保持 try block 较小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com