【发布时间】:2019-06-25 17:20:52
【问题描述】:
假设有一个 python 函数 foo() 使用了一些资源,并且被调用如下:
with foo(x,y,z) as f:
doSomething(f)
到目前为止一切顺利。现在让我们说 foo 基于各种因素接受一组复杂的参数,我想定义一个包装函数以使事情变得更简单。比如:
def simple_foo():
if x:
return foo(a,b,c)
else:
return foo(d,e,f)
现在,我想用 simple_foo 代替 foo,例如:
with simple_foo() as f:
doSomething(f)
但是,不出所料,这不起作用。如何编写 simple_foo() 来获得这种行为?
【问题讨论】:
-
它被称为上下文管理器 - 看看例子here
-
“但是,不出所料,这不起作用。”这怎么行不通,究竟?
-
@juanpa.arrivillaga 给出:AttributeError: aexit
-
如果ˋfooˋ 是一个合适的上下文管理器,这确实工作。在 ˋwithˋ 内部而不是在外部构造上下文管理器没有什么神奇之处。 究竟你的问题是什么?
-
@chessprogrammer 什么?请使用minimal reproducible example 编辑您的帖子,包括完整的错误消息
标签: python python-3.x with-statement