![](/img/trans.png)
[英]Assigning to a member with `as` in context-manager (with) and exception handler
[英]Python context-manager decorator masks my exception?
按照https://docs.python.org/3/library/contextlib.html中的示例..
在下面的合成代码中:
import sys
from contextlib import contextmanager, nullcontext
class MyException(Exception):
def __init__(self, *args: object) -> None:
super().__init__(*args)
@contextmanager
def annotate():
try:
yield None
finally:
return
def annotate2():
return nullcontext()
def main():
try:
with annotate():
raise MyException()
except MyException:
print("Good, Caught exception")
sys.exit(0)
print("How did I get here ???")
sys.exit(1)
if __name__ == '__main__':
main()
未捕获异常。 但是,如果我将其更改为
with annotate2():
raise MyException()
然后它按预期工作。 我的问题是,我的 contextmanager 有什么问题?
@contextmanager
def annotate():
try:
yield None
finally:
return
(使用 python 3.10.4 测试)
谢谢
波阿斯
谢谢,在https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions中找到了答案
如果 finally 子句执行 break、continue 或 return 语句,则不会重新引发异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.