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

zeep构造SOAP服务tMensajeEjecucionConsulta参数时Parametros报错问询

问题原因

该错误由Python常用SOAP客户端Zeep对WSDL中choice联合类型的解析限制导致:
你传入的Parametros是数组类型,每个数组元素为4种可选结构(Txt/Num/Fec/Ses)的choice联合类型,Zeep无法自动识别普通字典对应的choice分支,因此会将字典的key识别为非法参数抛出异常。

解决方案

方案1:显式构造对应类型实例(推荐)

先通过WSDL获取每个可选参数的类型定义,再构造实例传入数组即可:

# 第一步:获取参数结构对应的类型定义,如类型名不匹配可打印client.wsdl.types查看全量类型
TxtType = client.get_type('ns0:Txt')
FecType = client.get_type('ns0:Fec')

# 第二步:构造请求
MensajeType = client.get_type('ns0:tMensajeEjecucionConsulta')
req_data = MensajeType(
    CodConsulta={'v': '5473'},
    Parametros=[
        TxtType(n='Agente', v='Test'),
        FecType(n='Fecha', v='2021-10-28')
    ]
)

# 第三步:调用接口
response = client.service.ServicioEjecucionConsultaEncolumnada(req_data)

方案2:跳过类型校验快速适配

如果无法找到对应类型的定义名,可以使用Zeep的xsd.AnyObject构造参数,跳过自动类型校验:

from zeep import xsd

MensajeType = client.get_type('ns0:tMensajeEjecucionConsulta')
req_data = MensajeType(
    CodConsulta={'v': '5473'},
    Parametros=[
        xsd.AnyObject(
            xsd.Element('Txt', xsd.ComplexType([
                xsd.Element('n', xsd.String()),
                xsd.Element('v', xsd.String())
            ])),
            {'n': 'Agente', 'v': 'Test'}
        ),
        xsd.AnyObject(
            xsd.Element('Fec', xsd.ComplexType([
                xsd.Element('n', xsd.String()),
                xsd.Element('v', xsd.Date())
            ])),
            {'n': 'Fecha', 'v': '2021-10-28'}
        )
    ]
)

response = client.service.ServicioEjecucionConsultaEncolumnada(req_data)

内容的提问来源于stack exchange,提问作者Andre Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:04