jjzjj

contextmanager

全部标签

python - 查找在 : Block 中定义的函数

这是来自RichardJones'Blog的一些代码:withgui.vertical:text=gui.label('hello!')items=gui.selection(['one','two','three'])withgui.button('clickme!'):defon_click():text.value=items.valuetext.foreground=red我的问题是:他到底是怎么做到的?上下文管理器如何访问withblock内的范围?下面是一个基本模板,用于尝试解决这个问题:from__future__importwith_statementclassbutt

python - 继承上下文管理器的pythonic方式是什么

Python教我们使用__enter__和__exit__对对象进行清理。如果我需要创建一个使用对象的对象必须使用上下文管理器怎么办?想象一下:fromdatabase1importDB1fromdatabase2importDB2通常,它们会这样使用:withDB1()asdb1,DB2()asdb2:db1.do_stuff()db2.do_other_stuff()无论发生什么,db1和db2都将运行它们的__exit__函数,并清理连接、刷新等。当我将所有这些都放在一个类中时,我会怎么做?这对吗?这显然是不对的,db1和db2的上下文管理器在block的末尾运行,如注释中所指出

python - __exit__ 的返回值

我明白了__enter__和__exit__用于实现上下文管理器。如果在with语句中发生异常,异常的类型、值和回溯将传递给__exit__方法。__exit__可以处理异常:返回True:异常得到妥善处理。返回任何其他内容:with语句引发异常我遇到了以下__exit__方法。返回语句是否多余?def__exit__(self,type,value,traceback):self.close()returntype==None因为在我看来,如果没有异常发生,type自然会是None,所以__exit__返回true。没有提出任何建议。如果确实发生异常,type设置为实际的异常类型,因

python - 如何在上下文管理器中安全地处理异常

我想我已经读过with中的异常不允许正确调用__exit__。如果我在这张纸条上有误,请原谅我的无知。所以我这里有一些伪代码,我的目标是使用一个锁上下文,在__enter__记录开始日期时间并返回锁ID,在__exit__记录结束日期时间并释放锁:defmain():raiseExceptionwithcron.lock()aslockid:print('Gotlock:%i'%lockid)main()除了安全地存在上下文之外,我还能如何引发错误?注意:我有意在此伪代码中引发基本异常,因为我想在出现任何异常时安全退出,而不仅仅是预期的异常。注意:替代/标准的并发预防方法无关紧要,我想

Python 上下文管理器 : conditionally executing body?

我正在编写一个基于MPI的应用程序(但MPI在我的问题中并不重要,我提到它只是为了揭示基本原理)并且在某些情况下,当工作项少于流程时,我需要创建一个新的通信器,排除了无关的进程。最后,新的通信器必须由有工作要做的进程释放(并且只能由它们完成)。一个简洁的方法是写:withfilter_comm(comm,nworkitems)asnewcomm:...doworkwithcommunicatornewcomm...正文仅由有工作要做的进程执行。在上下文管理器中有没有办法避免执行正文?我知道上下文管理器的设计是为了避免隐藏控制流,但我想知道是否有可能规避这一点,因为在我的例子中,为了清楚

Python 上下文管理器 : conditionally executing body?

我正在编写一个基于MPI的应用程序(但MPI在我的问题中并不重要,我提到它只是为了揭示基本原理)并且在某些情况下,当工作项少于流程时,我需要创建一个新的通信器,排除了无关的进程。最后,新的通信器必须由有工作要做的进程释放(并且只能由它们完成)。一个简洁的方法是写:withfilter_comm(comm,nworkitems)asnewcomm:...doworkwithcommunicatornewcomm...正文仅由有工作要做的进程执行。在上下文管理器中有没有办法避免执行正文?我知道上下文管理器的设计是为了避免隐藏控制流,但我想知道是否有可能规避这一点,因为在我的例子中,为了清楚

python 'with' 语句,我应该使用 contextlib.closing 吗?

fromcontextlibimportclosingdefinit_db():withclosing(connect_db())asdb:withapp.open_resource('schema.sql')asf:db.cursor().executescript(f.read())db.commit()这是来自flask教程第3步(http://flask.pocoo.org/docs/tutorial/dbinit/#tutorial-dbinit)。我对其中的第4行有点好奇。我必须导入并使用“contextlib.closing()”方法吗?当我了解with语句时,许多文章说

python 'with' 语句,我应该使用 contextlib.closing 吗?

fromcontextlibimportclosingdefinit_db():withclosing(connect_db())asdb:withapp.open_resource('schema.sql')asf:db.cursor().executescript(f.read())db.commit()这是来自flask教程第3步(http://flask.pocoo.org/docs/tutorial/dbinit/#tutorial-dbinit)。我对其中的第4行有点好奇。我必须导入并使用“contextlib.closing()”方法吗?当我了解with语句时,许多文章说

python - 使用 with/as 上下文管理器打开文件列表

注意:我知道withopen('f1')asf1,open('f2')asf2:...语法。这是一个不同的问题。给定一个字符串列表file_names是否有一种方法可以使用with/as使用一行打开其中的每个文件名。比如:with[open(fn)forfninfile_names]asfiles:#usethelistoffiles这当然不起作用,因为它试图在列表中使用上下文管理器。列表的长度可能直到运行时才知道,例如sys.argv[1:] 最佳答案 如果您可以访问Python3.3+,则有一个专门为此目的设计的特殊类:Exit

python - 使用 with/as 上下文管理器打开文件列表

注意:我知道withopen('f1')asf1,open('f2')asf2:...语法。这是一个不同的问题。给定一个字符串列表file_names是否有一种方法可以使用with/as使用一行打开其中的每个文件名。比如:with[open(fn)forfninfile_names]asfiles:#usethelistoffiles这当然不起作用,因为它试图在列表中使用上下文管理器。列表的长度可能直到运行时才知道,例如sys.argv[1:] 最佳答案 如果您可以访问Python3.3+,则有一个专门为此目的设计的特殊类:Exit