小编Bov*_*ist的帖子

pydantic 验证 PyCharm:此装饰器不会收到它可能期望的可调用对象;内置装饰器返回一个特殊对象

from pydantic import BaseModel


class Request(BaseModel):
    num: int

    @validator("num")
    @classmethod
    def validate_num(cls, num: int) -> int:
        return num
Run Code Online (Sandbox Code Playgroud)

对于上述代码,PyCharm 发出警告“此装饰器不会收到它可能期望的可调用对象;内置装饰器返回一个特殊对象”。我认为警告不明确,因此我希望得到一些帮助。

当我将上面的代码更改为:

from fastapi.exceptions import RequestValidationError

from pydantic import BaseModel, validator
from pydantic.error_wrappers import ErrorWrapper


class Request(BaseModel):
    num: int

    @classmethod
    @validator("num")
    def validate_num(cls, num: int) -> int:
        if num < 0:
            raise RequestValidationError([ErrorWrapper(ValueError("error"), ())])
        return num


request = Request(num=-2)
Run Code Online (Sandbox Code Playgroud)

警告消失了,但代码在不应该执行的情况下执行时没有任何问题,这意味着验证由于某种原因被忽略。

python decorator pycharm

8
推荐指数
1
解决办法
2554
查看次数

将巨大的 Polars 数据帧转换为 dict,而不消耗太多 RAM

当我将 parquet 文件加载到 Polars DataFrame 中时,需要大约 5.5 GB 的 RAM。与我尝试过的其他选择相比,Polars 非常棒。然而,Polars 不支持创建像 Pandas 这样的索引。这对我来说很麻烦,因为我的 DataFrame 中的一列是唯一的,并且在我的应用程序中访问 df 中的数据的模式是基于唯一列(类似字典)的行查找。

由于数据帧很大,过滤成本太高。不过,我的 RAM 似乎也不够(32 GB)。我目前正在将 df 转换为“块”,如下所示:

h = df.height # number of rows
chunk_size = 1_000_000  # split each rows

b = (np.linspace(1, math.ceil(h/chunk_size), num=math.ceil(h/chunk_size)))
new_col = (np.repeat(b, chunk_size))[:-( chunk_size - (h%chunk_size))]
df = df.with_column(polars.lit(new_col).alias('new_index'))
m = df.partition_by(groups="new_index", as_dict=True)

del df
gc.collect()


my_dict = {}
for key, value in list(m.items()):
    my_dict.update(
    {
        uas: frame.select(polars.exclude("unique_col")).to_dicts()[0]
        for uas, frame in
        (
            value
            .drop("new_index")
            .unique(subset=["unique_col"], …
Run Code Online (Sandbox Code Playgroud)

python dictionary parquet python-polars

1
推荐指数
1
解决办法
1238
查看次数

标签 统计

python ×2

decorator ×1

dictionary ×1

parquet ×1

pycharm ×1

python-polars ×1