SQLAlchemy: «ловить классы, которые не наследуются от BaseException, не допускается» при тестировании в Pytest - PullRequest
0 голосов
/ 26 марта 2020

Недавно при запуске моих тестов в Pytest я начал получать странное предупреждение в конце результатов теста; много итераций следующего:

Exception ignored in: <function _ConnectionRecord.checkout.<locals>.<lambda> at 0x10eea07a0>
Traceback (most recent call last):
  File "/Users/username/appdev/scattr-api/venv/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 503, in <lambda>
  File "/Users/username/appdev/scattr-api/venv/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 710, in _finalize_fairy
  File "/Users/username/appdev/scattr-api/venv/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 528, in checkin
  File "/Users/username/appdev/scattr-api/venv/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 387, in _return_conn
  File "/Users/username/appdev/scattr-api/venv/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 106, in _do_return_conn
TypeError: catching classes that do not inherit from BaseException is not allowed

Это начало происходить недавно, независимо от того, пройдены тесты или нет. Я не понимаю, почему это предупреждение начало появляться, или что это значит, что оно «игнорируется», поэтому я не уверен, что мне следует с этим делать, если что-нибудь. Я не заметил никаких проблем при запуске моего реального приложения, это просто то, что происходило при выполнении тестов.

Тот факт, что последняя функция в traceback - "_do_return_conn", заставляет меня думать, что это что-то о пуле соединений , но я все еще не уверен, как это понять ...

1 Ответ

1 голос
/ 12 апреля 2020

Я определил, что проблема возникает из-за того, что в тестах pytest не было явного закрытия соединения.

Я использовал пользовательское соединение для поиска значений в базе данных в тестах (чтобы убедиться, что были вставлены правильные значения ) и если это не было явно закрыто в конце, то появилось это сообщение об ошибке crypti c.

SQLAlchemy имеет сборщик мусора , который в конечном итоге будет возвращать соединения с пулом, даже если они явно не закрыты. Однако в контексте запуска pytest это не успевает произойти во время теста, что приводит к сообщению об ошибке crypti c.

...