好久不学习python的语法了,上次去面试,和面试官聊到了python中的with-as statement(也称context manager),挺感兴趣的,这两天学习了一番,收获颇丰在此分享。 先说明一个常见问题,文件打开: try : f = open ( 'xxx' ) do something except : do something finally : f.close() 1. 2. 3. 4. 5. 6. 7...
总之,with-as表达式极大的简化了每次写finally的工作,这对保持代码的优雅性是有极大帮助的。 感谢以下参考资料:stackoverflow: Catching an exception while using a Python ‘with’ statementUnderstanding Python’s “with” statementpython docs:http://docs.python.org/2/reference/compound_stmts.html#withhttp:/...
with从Python 2.5就有,需要from __future__ import with_statement。自python 2.6开始,成为默认关键字。 也就是说with是一个控制流语句,跟if/for/while/try之类的是一类的,with可以用来简化try finally代码,看起来可以比try finally更清晰。 with EXPRESSION [ as VARIABLE] WITH-BLOCK 1. 基本思想是with所求值...
while this might look like magic, the way Python handles with is more clever than magic. The basic idea is that the statement after with has to evaluate an object that responds to an __enter__() as well as an __exit__() function. 这看起来充满魔法,但不仅仅是魔法,Python对with的处理...
with open('filename', 'wt') as f: f.write("hello world") 这样写的好处是我们对文件进行读写时,with as帮我们捕获异常,以及处理文件句柄,来防止在使用完文件后,没有关闭文件句柄With语句是什么? With语句是什么? Python’s with statement provides a very convenient way of dealing with the situation...
理解Python中的with…as…语法– Zhoutall 理解Python中的with…as…语法 Posted in python - 22五月, 2013 - 9 Comments 使用语言的好特性,而不是那些糟糕的特性———不知道谁说的 好久不学习python的语法了,上次去面试,和面试官聊到了python中的with-as statement(也称context manager),挺感兴趣的,这两天学...
try:withopen("a.txt")asf:dosomething except xxxError:dosomething about exception 总之,with-as表达式极大的简化了每次写finally的工作,这对保持代码的优雅性是有极大帮助的。 参考 stackoverflow: Catching an exception while using a Python ‘with’ statement...
with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from future import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What’s new in Python 2.6? 中 with 语句相关部分介绍)。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常...
然后有答主提到PEP377,这个大概不是跳出with,而是在某些条件下(抛出SkipStatement时)完全不运行with语句...
# 由外层代码对异常进行处理ifnotexit(context_manager,*sys.exc_info()):raisefinally:# 正常退出,或者通过 statement-body 中的break/continue/return语句退出 # 或者忽略异常退出ifexc:exit(context_manager,None,None,None)# 缺省返回 None,None 在布尔上下文中看做是 False ...