如何在libica.openapi.v2中正确将布尔参数以字符串传入AnalysisParameterInput避免ApiTypeError?
解决libica.openapi.v2中AnalysisParameterInput的ApiTypeError问题
问题分析
报错提示Invalid type for variable 'value'. Required value type is one of [NoneType, str] and passed type was bool,说明传入AnalysisParameterInput的value参数仍有布尔类型的值未被转换为字符串,尽管你已经做了转换处理,但可能存在逻辑覆盖不全的情况。
解决方案
方案1:统一强制转换为字符串(覆盖所有布尔类型场景)
简化转换逻辑,确保所有非None的值都被转为字符串,包括原生布尔值、numpy布尔值等特殊布尔类型:
import numpy as np # 若使用numpy布尔值则需要导入,否则可省略 param_inputs_list = [] for key, value in param_inputs.items(): if value is None: processed_value = None else: # 处理所有布尔类型(包括原生bool和numpy.bool_) if isinstance(value, (bool, np.bool_)): processed_value = "True" if value else "False" # 处理字符串形式的布尔值 elif isinstance(value, str) and value.lower() in ("true", "false"): processed_value = value.capitalize() # 其他类型直接转为字符串 else: processed_value = str(value) print(f"Adding parameter: {key} = {processed_value}") param_inputs_list.append(AnalysisParameterInput(parameter_code=key, value=processed_value))
方案2:直接强制转换所有值为字符串(极简版)
如果流水线参数不要求布尔值必须是"True"/"False"格式,可直接将所有非None的值转为字符串,彻底避免类型问题:
param_inputs_list = [] for key, value in param_inputs.items(): processed_value = str(value) if value is not None else None print(f"Adding parameter: {key} = {processed_value}") param_inputs_list.append(AnalysisParameterInput(parameter_code=key, value=processed_value))
方案3:使用字典解包传入参数
部分OpenAPI客户端对关键字参数的处理可能存在问题,尝试用字典构造参数后解包传入:
param_inputs_list = [] for key, value in param_inputs.items(): # 先按需求处理value得到processed_value if value is None: processed_value = None elif isinstance(value, bool): processed_value = "True" if value else "False" elif isinstance(value, str) and value.lower() in ("true", "false"): processed_value = value.capitalize() else: processed_value = str(value) param_dict = { "parameter_code": key, "value": processed_value } param_inputs_list.append(AnalysisParameterInput(**param_dict))
验证建议
- 转换后打印
type(processed_value)确认类型为str或NoneType - 检查
param_inputs中是否存在嵌套结构(比如字典、列表),如果有需要递归处理内部的布尔值
内容的提问来源于stack exchange,提问作者C0DiFire
相关产品推荐
相关产品推荐

