You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pydantic如何实现同一变量同时支持str与list类型传入

解决方案

报错根因

报错来自两个问题:

  1. Python端原有questionAnswers类型仅支持字符串,多选时前端传入数组会触发类型不匹配错误
  2. 原有计分逻辑直接将答案传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:39:04