36得票2回答
如何在上下文管理器内安全处理异常

我想我读到过with语句内部的异常不允许正确调用__exit__。如果我的理解有误,请原谅我的无知。 所以我这里有一些伪代码,我的目标是使用一个锁上下文,在__enter__时记录开始日期时间并返回锁定ID,在__exit__时记录结束日期时间并释放锁:def main(): rai...

36得票7回答
在上下文管理器的__enter__()方法中捕获异常

在 __enter__() 中出现异常的情况下,是否有可能确保调用 __exit__() 方法? >>> class TstContx(object): ... def __enter__(self): ... raise Exception('Oops...

36得票3回答
使用可变数量的上下文管理器的contextlib.nested的替代方法

我们有一些代码,根据运行时参数调用不同数量的上下文管理器: from contextlib import nested, contextmanager @contextmanager def my_context(arg): print("entering", arg) t...

36得票1回答
__exit__的返回值

我理解: __enter__和__exit__用于实现上下文管理器。 如果 with 语句中出现异常,异常的类型、值和回溯信息都将传递给 __exit__ 方法。 __exit__ 可以处理异常: 返回 True:异常得到了优雅的处理 返回其他内容:with 语句会引发该异常 ...

34得票4回答
Python多行嵌套上下文管理器

在Python 2.6中,我们通常这样格式化嵌套的上下文管理器:with nested( context1, context2 ) as a, b: pass 自Python 2.7开始,nested已经过时。我看到很多例子都是将多个上下文管理器放在一行上,但是我找不到...

33得票2回答
Python的'with'语句,我应该使用contextlib.closing吗?

这是来自Flask教程的第三步: from contextlib import closing def init_db(): with closing(connect_db()) as db: with app.open_resource('schema.sql')...

32得票2回答
Python:标准函数和上下文管理器?

在 Python 中,有许多既可以作为标准函数又可以作为上下文管理器的函数。例如,open()可以这样调用:my_file=open(filename,'w') 或者with open(filename,'w') as my_file: 两者都会给你一个my_file对象,可用于进行所需的操作...

31得票1回答
Python中的“with”语句是否完全等同于try-except-finally块?

我知道这个问题已经被广泛讨论过了,但是我仍然找不到一个能够确认的答案:使用 with 语句是否等同于在 try - (except) - finally 块中调用相同的代码,在这种情况下,无论在上下文管理器的 __exit__ 函数中定义了什么都将放置在 finally 块中? 例如-- 这...

29得票1回答
为什么 Contextmanager 会抛出一个运行时错误 'generator didn't stop after throw()'?

在我的utility.py文件中,我有以下内容: @contextmanager def rate_limit_protection(max_tries=3, wait=300): tries = 0 while max_tries > tries: t...

29得票6回答
了解Python的with语句和上下文管理器

我试图理解with语句。我知道它被认为是try/except块的替代品。现在假设我像这样做:try: name = "rubicon" / 2 # to raise an exception except Exception as e: print(&quot...