Pydantic如何实现同一变量同时支持str与list类型传入
解决方案
报错根因
报错来自两个问题:
- Python端原有
questionAnswers类型仅支持字符串,多选时前端传入数组会触发类型不匹配错误- 原有计分逻辑直接将答案传入
index()方法,数组类型参数无法被该方法处理,会直接抛出异常
第一步:调整类型定义,和前端TS逻辑对齐
Python 3.10及以上版本(支持|联合类型语法)
直接修改类型声明即可:
questionAnswers: Optional[str | list[str]]
Python 3.9及以下版本
需要先导入typing模块的对应类型:
from typing import Optional, Union, List # 类型定义修改为同时支持字符串和字符串数组 questionAnswers: Optional[Union[str, List[str]]]
第二步:修改校验&计分逻辑,兼容两种答案类型
将答案统一转成列表格式处理,避免单选/多选格式差异导致逻辑报错,同时增加非法选项校验:
total_score = 0 for index, question in enumerate(questions): current_answer = question["questionAnswers"] # 统一转为列表格式:单选字符串套一层数组,多选数组直接用 selected_list = [current_answer] if isinstance(current_answer, str) else current_answer # 遍历每个选中项累加分值 for opt in selected_list: if opt not in question["options"]: raise ValueError(f"题目{index+1}存在非法选项:{opt}") # 按原有逻辑取选项下标作为分值累加 total_score += question["options"].index(opt)
内容的提问来源于stack exchange,提问作者donsonde
相关产品推荐
相关产品推荐

