问题描述
我想创建一个 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