contextmanager相关内容
考虑以下Python代码: def values(): with somecontext(): yield 1 yield 2 for v in values(): print(v) break 在这种情况下,Python是否保证生成器已正确关闭并因此退出了上下文? 我意识到,在实践中,由于引用计数和生成器的急切破坏,CPyt
..
我正在尝试使用此处的示例打开,读取,修改和关闭json文件: 如何在使用Python从文件中检索的JSON数据中添加键值? import os import json path = '/m/shared/Suyash/testdata/BIDS/sub-165/ses-1a/func' os.chdir(path) string_filename = "sub-165_ses-1a
..
我已阅读到使用以下格式打开文件时 with open(filename) as f: #My Code f.close() 不需要显式关闭文件.有人可以解释为什么会这样吗?另外,如果有人确实关闭了文件,会不会有不良影响? 解决方案 这一英里高的概述是:当您离开嵌套块时,Python会自动为您调用f.close(). 您是通过跌倒谷底还是调用break/cont
..
我想我已经读到with内的异常不允许正确调用__exit__.如果我在此注释上写错了,请原谅我的无知. 所以我这里有一些伪代码,我的目标是使用一个锁上下文,该锁上下文在__enter__上记录开始日期时间并返回锁id,在__exit__上记录结束日期时间并释放锁: def main(): raise Exception with cron.lock() as lockid:
..
我们有根据运行时参数调用可变数量的上下文管理器的代码: 从contextlib导入嵌套,contextmanager @contextmanager def my_context(arg): print(“ entering”,arg) 尝试: yield arg 最后: print(“ exiting”,arg) def my_fn(items): 具有嵌套(*(
..
我有一个帮助器类 Decontext ,该类用于将上下文管理器转换为装饰器(pyton 2.6)。 class Decontext(object): “”“ 使上下文管理器也充当装饰器 “”“ def __init __(self,context_manager): self._cm = context_manager def __enter __(self): 返回s
..
这可能会使事情有点过头,但主要出于好奇。 是否有可能有一个可调用的对象(函数/类) 同时充当上下文管理器和装饰器: def xxx(* args ,** kw): #或作为类 @xxx(foo,bar) def im_decorated(a,b): print('do东西'') 和xxx(foo,bar): print('做东西') 解决方案 从Pyth
..
在Python Lan参考中3.4.4,据说__aenter__()和__aexit__()必须返回等待项.但是,在示例异步上下文管理器中,这两个方法返回None: class AsyncContextManager: async def __aenter__(self): await log('entering context') async def __
..
我有一个异步API ,我正在使用该API连接并将邮件发送到SMTP具有一些设置并拆除的服务器.因此,它非常适合使用Python 3的contextlib中的contextmanager. 但是,我不知道是否有可能写,因为它们都使用生成器语法来写. 这可能证明了这个问题(包含yield-base和async-await语法的混合,以演示异步调用和上下文管理器的yield之间的区别).
..
import contextlib import time @contextlib.contextmanager def time_print(task_name): t = time.time() try: yield finally: print task_name, "took", time.time() - t, "seconds.
..
我有timeout上下文管理器,可以与信号完美配合,但是由于信号仅在主线程中起作用,因此它在多线程模式下会引发错误. def timeout_handler(signum, frame): raise TimeoutException() @contextmanager def timeout(seconds): old_handler = signal.signal(si
..
我有一个Python3脚本,我想有选择地将stdout和stderr重定向到文件.像这样: # variable declarations if log_output: output_file = open('output.txt', 'w') sys.stdout = output_file if log_errors: errors_file = open('e
..
我试图弄乱上下文管理器,并在使用Python 2.6运行代码时感到有些惊讶。实际上, exc_value 参数似乎是一个字符串而不是一个异常。 一些代码可以点亮这个问题: import sys class contextmanager(object): def __enter __(self): pass def __exit __(self,type_,va
..
我想我已经读到 with 中的异常不允许正确调用 __ exit __ 。如果我错了,请原谅我的无知。 所以我这里有一些伪代码,我的目标是使用一个 __ enter __ 记录开始日期时间并返回锁ID,并在 __ exit __ 记录结束日期时间并释放锁: def main(): 引发异常 ,其中cron.lock()作为lockid: print('Got lock:%i'%
..
我有一个将在其中包含aiohttp.ClientSession对象的类。 通常在使用时 与aiohttp.ClientSession()作为会话异步: #一些代码 由于调用了会话的__aexit__方法,因此该会话将关闭。 我无法使用上下文管理器,因为我想保持会话对于 这有效: 导入异步 import aiohttp class M
..
我正在尝试与pylabels一起为即将发生的事件创建名称标签.在代码的一部分中,有以下tid位: with open(os.path.join(base_path, "names.txt")) as names: sheet.add_labels(name.strip() for name in names) 其中sheet = labels.Sheet(specs, write
..
情况:具有基本属性的简单类 在我正在处理的应用程序中,特定类的实例在其生命周期的 end 处保留,并且随后对其进行了 的修改,但它们的属性可能需要阅读.例如,该实例的end_time或其相对于同一类其他实例的顺序位置(初始化的第一个实例的值为1,下一个实例的值为2,依此类推.) class Foo(object): def __init__(self, position):
..
对于要在with块中使用的类或函数是否存在通用命名约定,例如 with CreateSomeContext() as x: ... ?信号表明类或函数的结果应与with一起使用? 解决方案 在相应的PEP 0343 ,其中提到了两个约定: 示例上下文名称中使用的时态不是 随意的.当名称指代一个 在__enter__方法中完成并在 __exit__方法.当名称表示要在
..
MySQLdb Connections具有一个基本的上下文管理器,可在 enter 上创建一个游标,回滚或在 exit 上提交,并且隐式不抑制异常.从连接源: def __enter__(self): if self.get_autocommit(): self.query("BEGIN") return self.cursor() def __exit__
..
我习惯(宠坏了?)python的 SQLite 接口来处理SQL数据库. python的SQLite API中的一个不错的功能是“上下文管理器",即python的with语句.我通常以以下方式执行查询: import as sqlite with sqlite.connect(db_filename) as conn: query = "INSERT OR IGNORE INTO
..