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

使用Zeep调用SOAP API时遇TypeError:int类型不可迭代求助

解决Zeep调用SOAP API时的类型错误问题

问题分析

你用Zeep调用SOAP接口时遇到两类错误:

  1. 初始代码传badgeNoList = [1111],报错TypeError: argument of type 'int' is not iterable
  2. 修改为badgeNoList = [{'badgeNo': 61410}]后,又报ValidationError: Missing element for Any

结合接口文档和Postman的XML请求结构,问题核心是参数类型不匹配和必填参数缺失:

  • 接口定义中badgeNoList是ns0:badgeNoList复杂类型,不是简单整数列表,它需要包含<badgeNo>子元素的嵌套结构
  • 接口要求三个参数:apiKey(字符串类型)、badgeNoList、emailList,你可能遗漏了必填的emailList参数
  • apiKey定义为xsd:string,你传入的是整数,可能触发类型校验问题

解决方案

1. 先确认复杂类型结构

通过Zeep打印badgeNoList和emailList的具体定义,明确需要的字段格式:

from zeep import Client

url = "https:/my_url.php?wsdl"
client = Client(url)

# 打印badgeNoList的结构
print(client.get_type('ns0:badgeNoList'))
# 打印emailList的结构
print(client.get_type('ns0:emailList'))

2. 正确构造参数调用接口

根据Postman的XML结构,badgeNoList是包含badgeNo子列表的对象,同时注意apiKey转字符串、补全必填的emailList:

方式一:用Zeep类型构造器创建参数

from zeep import Client

url = "https:/my_url.php?wsdl"
client = Client(url)

# 构造符合类型的badgeNoList
BadgeNoList = client.get_type('ns0:badgeNoList')
badgeNoList = BadgeNoList(badgeNo=[1111])

# 构造符合类型的emailList(必填则传入,空值也需对应结构)
EmailList = client.get_type('ns0:emailList')
emailList = EmailList(email=[])

apiKey = "12345"  # 转为字符串类型
res = client.service.myService(apiKey, badgeNoList, emailList)

方式二:直接传入符合结构的字典

from zeep import Client

url = "https:/my_url.php?wsdl"
client = Client(url)

badgeNoList = {'badgeNo': [1111]}  # 正确结构:key为badgeNo,值是整数列表
emailList = {'email': []}  # 对应emailList结构,空列表表示无邮箱

apiKey = "12345"
res = client.service.myService(apiKey, badgeNoList, emailList)

3. 错误原因说明

  • 第一个错误:你传入的[1111]是整数列表,但Zeep期望的是ns0:badgeNoList复杂对象,它尝试解析列表中的整数时触发了“int不可迭代”的错误。
  • 第二个错误:[{'badgeNo': 61410}]把badgeNoList当成了列表,而实际它是包含badgeNo字段的对象;同时因遗漏emailList参数,导致接口验证失败。

内容的提问来源于stack exchange,提问作者Alexis Kan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:14:59