Taospy=2.3.6 连接器关闭报 NoneType error
modaye opened this issue · 8 comments
modaye commented
Traceback (most recent call last):
python3.9/site-packages/taos/connection.py", line 198, in __del__
python3.9/site-packages/taos/connection.py", line 59, in close
TypeError: 'NoneType' object is not callable
出错代码在 connection.py 第 59 行 taos_close(self._conn)
sangshuduo commented
@modaye 请提供可以重现的简单代码,谢谢
modaye commented
@modaye请提供可以返回的简单代码,谢谢
hellozai/db/base.py
import logging
import functools
import textwrap
from typing import Optional, Callable
from collections import ChainMap
import taos
logger = logging.getLogger(__name__)
def create_taos_connect(
host: str = "localhost",
port: int = 6030,
user: str = "root",
password: str = "taosdata",
database: Optional[str] = None,
**kwargs
) -> taos.TaosConnection:
params = {
"host": host,
"port": port,
"user": user,
"password": password,
"database": database
}
params = {k: v for k, v in params.items() if v is not None}
kwargs.update(params)
config = ChainMap(kwargs)
# 将taos连接器进行包装 对调用进行捕获或拦截
_db_conn = ConnectWrapper(taos.connect(**config))
logger.info(
f"taos connect host:%s port: %s database: %s",
config.get('host'), config.get('port'), config.get('database')
)
return _db_conn # type: ignore
def params_catch(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
if args:
logger.debug("func: %s, args: %s", func.__name__, textwrap.shorten(args[0], width=300, placeholder="..."))
return func(*args, **kwargs)
return wrapper
class ConnectWrapper:
def __init__(self, conn: taos.TaosConnection):
self._conn = conn
def __getattr__(self, item):
attr = getattr(self._conn, item)
if isinstance(attr, Callable):
return params_catch(attr)
return attr
在base.py 中直接获取连接对象执行任意数据库操作不会报错,但是当在其他模块引用该 create_taos_connect 函数并建立连接就产生上面的报错。
run.py
from hellozai.db import create_taos_connect
db = create_taos_connect()
db.execute("show databases;")
引用相同的 base.py 代码在3个不同的电脑(Ubuntu 20.04)均稳定复现错误。
zitsen commented
我在多个版本下下均未复现。只能建议检查下环境。
dingbo8128 commented
我在 windows 上 用多个版本 python 测试,也均无复现。 最好提供项目结构的细节。
modaye commented
确实是特定的项目才会复现该问题, 我在hellozai 目录下还有一个models
包, 包中的models.py
文件中 也导入了taos
用于其中函数的类型注解,经过测试只要在该 models.py
模块中导入 taos
就引发错误。
已经放弃在该模块添加类型提示,使用 models.pyi
作为注解存根不会引发错误
在其他命名的项目下,复制 hellozai
内部所有文件,进行测试也不会产生错误
modaye commented
这是一个奇怪的问题,将代码copy 到其他由Pycharm 创建的项目下,并不会引发报错。
modaye commented
我在多个版本下下均未复现。只能建议检查下环境。
感谢
modaye commented
我在 windows 上 用多个版本 python 测试,也均无复现。 最好提供项目结构的细节。
感谢