将 pydantic.BaseModel 与hiredis.Reader 一起使用时出现类型错误

问题描述

我想创建一个 pydantic.BaseModel 类型的类,它有一个hiredis.Reader 类型的对象。当我运行我的代码时,我得到一个 TypeError。 TypeError 立即发生。

TypeError: cannot pickle 'hiredis.Reader' object

from hiredis import Reader
from pydantic import BaseModel

class Foo(BaseModel):
    reader: Reader = Reader(encoding="utf-8",errors="strict")

hiredis-py 是一个解析 Redis 协议的 Python 扩展。 hiredis 本身是用 C 写的。也许这就是导致错误的问题。

你们有没有遇到过同样的错误并且可以帮助我?

解决方法

您可以通过将模型设置为允许任意类型来避免这种情况。

https://pydantic-docs.helpmanual.io/usage/types/#arbitrary-types-allowed

from hiredis import Reader
from pydantic import BaseModel

class Foo(BaseModel):
    reader: Reader = Reader(encoding="utf-8",errors="strict")

    class Config:
        arbitrary_types_allowed = True