使用Pydantic 1.10.7解析模型时遇cython_function_or_method不可下标错误
问题解决
直接错误原因及修复
你遇到的TypeError: 'cython_function_or_method' object is not subscriptable是因为Pydantic 1.x版本的parse_obj_as不支持下标调用语法,这种方括号[]的泛型调用是Pydantic 2.x才引入的写法。
在Pydantic 1.10.7中,正确的调用方式是把类型作为第一个参数,待解析数据作为第二个参数:
from typing import List from pydantic import parse_obj_as parsed_columns = parse_obj_as(List[Column], columns)
其他需要修复的潜在问题
除了调用方式错误,你的代码还有两处问题会导致后续解析失败:
YearAndMonth类未定义:模型中year_and_month属性返回了YearAndMonth类型,但代码里没有这个类的定义,需要补充:
from pydantic import BaseModel class YearAndMonth(BaseModel): year: int month: int
fields字段类型不明确:当前fields: Sequence = []使用了抽象类型Sequence,Pydantic解析时可能无法正确处理,建议改为具体类型,比如:
from typing import List class Column(BaseModel, frozen=True): # ...其他字段 fields: list = []
或者如果需要支持嵌套Column结构,用自引用类型:
from typing import Sequence class Column(BaseModel, frozen=True): # ...其他字段 fields: Sequence["Column"] = [] Column.update_forward_refs()
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

