#python #django #exception #redis
#python #django #исключение #redis
Вопрос:
Итак, у меня есть Django 2.2.16, работающий с redis
библиотекой 3.5.0.
Где-то по пути Connection
объекты Redis выходят из области видимости и получают их __del__
called, который вызывает disconnect()
метод в библиотеке Redis, это выглядит следующим образом:
def disconnect(self):
"Disconnects from the Redis server"
self._parser.on_disconnect()
if self._sock is None:
return
try:
if os.getpid() == self.pid:
shutdown(self._sock, socket.SHUT_RDWR)
self._sock.close()
except socket.error:
pass
self._sock = None
Теперь, когда это происходит, это исключение перехватывается:
October 12th 2020, 14:28:30.750 Exception ignored in: <function Connection.__del__ at 0x7fddec766830>
October 12th 2020, 14:28:30.750 Traceback (most recent call last):
October 12th 2020, 14:28:30.750 File "/usr/local/lib/python3.7/site-packages/redis/connection.py", line 537, in __del__
October 12th 2020, 14:28:30.750 File "/usr/local/lib/python3.7/site-packages/redis/connection.py", line 667, in disconnect
October 12th 2020, 14:28:30.750 TypeError: catching classes that do not inherit from BaseException is not allowed
Строка 667 в disconnect здесь относится к этой строке: except socket.error:
Now socket
— это стандартная библиотека, и она .error
, безусловно, является производной BaseException
, почему я вообще получаю это исключение?