【发布时间】:2018-11-15 21:00:00
【问题描述】:
下面的代码在with语句和python3的异常处理上有什么问题吗?如果不是,编写预期输出的正确方法是什么?
from contextlib import contextmanager
@contextmanager
def test():
print("Hello")
yield
print("goodbye")
try:
with test():
print("inside test")
raise KeyError
except KeyError:
print("KeyError")
else:
print("else")
finally:
print("finally")
输出是
Hello
inside test
KeyError
finally
我预计输出是:
Hello
inside test
goodbye
KeyError
finally
我相信other people写的类似,希望在文件处理过程中引发异常时关闭文件。
我的python3版本是:
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609]
【问题讨论】:
标签: python python-3.x exception-handling with-statement contextmanager