I’m gettin an ImportError
exception when execute code:
from requests import Session
class web_client(object):
def __init__(self, adapter: type):
self.adapter = adapter
self.s = Session()
self.s.verify = False
self.adapter.auth(self)
def __del__(self):
self.adapter.close()
self.s.close()
class adapter(object):
@classmethod
def process(cls):
cls.client.s.get('https://stackoverflow.com')
@classmethod
def auth(cls, client: web_client):
cls.client = client
cls.process()
@classmethod
def close(cls):
cls.process() # exception here
if __name__ == "__main__":
web_client(adapter)
Why this code throws an error and how to avoid it?
Exception ignored in: <function web_client.__del__ at 0x00000231EE1D8310>
Traceback (most recent call last):
File "C:UsersmeDesktopmain.py", line 12, in __del__
File "C:UsersmeDesktopmain.py", line 28, in close
File "C:UsersmeDesktopmain.py", line 19, in process
File "C:Anaconda3libsite-packagesrequestssessions.py", line 555, in get
File "C:Anaconda3libsite-packagesrequestssessions.py", line 528, in request
File "C:Anaconda3libsite-packagesrequestssessions.py", line 448, in prepare_request
File "C:Anaconda3libsite-packagesrequestscookies.py", line 544, in merge_cookies
File "C:Anaconda3libsite-packagesrequestscookies.py", line 352, in update
File "C:Anaconda3libcopy.py", line 92, in copy
ImportError: sys.meta_path is None, Python is likely shutting down
3
Found this solution:
from requests import Session
from atexit import register
class web_client(object):
def __init__(self, adapter: type):
self.s = Session()
self.s.verify = False
register(adapter.close) # magic is here
adapter.auth(self)
def __del__(self):
self.s.close()
del self.s
class adapter(type):
@classmethod
def process(cls):
cls.client.s.get('https://stackoverflow.com')
@classmethod
def auth(cls, client: web_client):
cls.client = client
cls.process()
@classmethod
def close(cls):
cls.process()
if __name__ == "__main__":
web_client(adapter)
1