Mik*_*son 2 python with-statement
试图更深入地理解事物。
如果我打开一个文件、一个网络请求、张量流会话或任何可以用with语句处理的东西;有没有什么时候我不应该使用with声明?
例如,是否有某个时候我应该使用更通用/通用的try except结构?
我真正的问题是,真正的底层结构是什么with?我读了一些很好的有用提示以及文档本身,但对我来说,它的一些内部工作原理仍然with有点像黑魔法。我试图揭开神奇成分的神秘面纱。
我总是通过 Python 增强提案 (PEP) 来理解 Python 中的概念,因为与文档相比,它们更关注事物的概念推理,并且通常直接解决:
因为您对实施方面感兴趣,所以这里是PEP 343 的相关努力 - “with”声明:
规范:“with”声明
提出了一个新的语句,其语法如下:
Run Code Online (Sandbox Code Playgroud)with EXPR as VAR: BLOCK(省略段落 - 与这个问题无关)
上述声明的翻译是:
Run Code Online (Sandbox Code Playgroud)mgr = (EXPR) exit = type(mgr).__exit__ # Not calling it yet value = type(mgr).__enter__(mgr) exc = True try: try: VAR = value # Only if "as VAR" is present BLOCK except: # The exceptional case is handled here exc = False if not exit(mgr, *sys.exc_info()): raise # The exception is swallowed if exit() returns true finally: # The normal and non-local-goto cases are handled here if exc: exit(mgr, None, None, None)
因此,with 语句的内部工作原理与构造完全一样try: finally,只是使用更清晰的语法,使得更难忘记关闭文件等。
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |