我想创建一个使用 requests.Session() 的类。因此,我想使用上下文管理器。但是,当我尝试访问该类的任何函数或变量时,上下文管理器会回复:
exception type: <class 'AttributeError'>
exception value: type object 'NoneType' has no attribute 'user'
exception trace: <traceback object at 0x0000024CFAF30340>
我的代码:
Class request_session:
def __init__(self, user="rwelch"):
self.user = user
self.session = (
requests.Session()
)
def __enter__(self):
print("Creating a new connection...")
def __exit__(self, exception_type, exception_val, trace):
print("Closing connection...")
if exception_type:
print(
"exception type: ",
exception_type,
"\nexception value: ",
exception_val,
"\nexception trace: ",
trace,
)
response = True
else:
response = False
self.session.close()
return response
...
with request_session() as request_session_handler:
print(request_session_handler.user)
我从仅使用文件管理的示例中获得了这种类型的实现,因此我确信我在这里缺少一些基本的东西。
提前致谢
你应该
return
会话处理程序的值
或者,您通常可以避免创建自定义上下文管理器,并使用其中的
@contextlib.contextmanager
和 yield
来装饰函数
class Foo:
def __enter__(self):
self.managed_resource = bar()
return self.managed_resource
def __exit__(self):
self.managed_resource.close()
@contextlib.contextmanager
def my_contextmgr():
resource = bar()
try:
yield resource
finally:
resource.close()