Мы видим исключения в нашем журнале, например:
ERROR Exception ignored in: <function Connection.__del__ at 0x7f9b70a5cc20>
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.7/site-packages/redis/connection.py", line 537, in __del__
File "/app/.heroku/python/lib/python3.7/site-packages/redis/connection.py", line 667, in disconnect
TypeError: catching classes that do not inherit from BaseException is not allowed
Согласно исходному коду Redis оскорбительная строка - это except
в следующем фрагменте:
try:
if os.getpid() == self.pid:
shutdown(self._sock, socket.SHUT_RDWR)
self._sock.close()
except socket.error:
pass
Это означает, что socket.exception не наследуется от BaseException. Однако, насколько я могу судить (на основе документации и метода класса mro
), socket.exception наследует от BaseException.
Почему это происходит? Что я могу сделать, чтобы предотвратить это?
Кстати, наш код не вызывает Redis напрямую. Мы используем Redis Queue (rq), который реализован с помощью Redis.