suds soap 字典结果上的 setdefault()
setdefault() on suds soap dict results
给定以下通用代码:
def soapQuery():
soapuser = "Base64String"
soappass = "Base64String"
soapurl = 'https://url/file.ext?wsdl'
ntlm = WindowsHttpAuthenticated(username=soapuser, password=soappass)
client = Client(soapurl, transport=ntlm)
result = client.service.method(something='somethingtosearchfor')
soapfiltered = []
for record in result.SoapRecord:
soapfiltered.extend((str(record.value1), str(record.value2), str(record.value3), str(record.value4)))
return zip(*[iter(soapfiltered)]*4)
当 运行 我得到以下错误:
AttributeError: SoapRecord instance has no attribute 'value3'
返回的 MOST of result.SoapRecord
将包含所有 4 个 record.value
,但有些没有。有没有办法设置要返回的默认值,如 None
或 Null
?我试过将 record.setdefault('value3', None)
扔进去,但它不起作用。任何和所有帮助将不胜感激。提前谢谢你。
嗯,在Python中没有Null
,而dict的setdefault
默认是None
。顺便说一句,字典不能通过 Python 中的点运算符访问(遗憾的是,我想念 JS 的功能)所以基本上......我不认为 record
是字典,而是一个对象.要检查对象是否具有 属性,您可以执行 hasattr(record, 'value1')
例如。
考虑到所有这些,要将所有内容都放在一个表达式中,您可以这样做:
hasattr(record, 'value1') and str(record.value1) or None
这是一个布尔表达式,在 Python 中,您可以计算布尔表达式而无需将值完全转换为布尔值。因此,该表达式将为您提供 str(record.value1)
的值或简单的 None
.
抱歉,如果此答案中有任何错误,我对 Soap 库不熟悉。
编辑: 正如@plaes 在评论中指出的那样,getattr(record, 'value1', None)
是一种更短、更简单的方法。谢谢你:)
给定以下通用代码:
def soapQuery():
soapuser = "Base64String"
soappass = "Base64String"
soapurl = 'https://url/file.ext?wsdl'
ntlm = WindowsHttpAuthenticated(username=soapuser, password=soappass)
client = Client(soapurl, transport=ntlm)
result = client.service.method(something='somethingtosearchfor')
soapfiltered = []
for record in result.SoapRecord:
soapfiltered.extend((str(record.value1), str(record.value2), str(record.value3), str(record.value4)))
return zip(*[iter(soapfiltered)]*4)
当 运行 我得到以下错误:
返回的AttributeError: SoapRecord instance has no attribute 'value3'
MOST of result.SoapRecord
将包含所有 4 个 record.value
,但有些没有。有没有办法设置要返回的默认值,如 None
或 Null
?我试过将 record.setdefault('value3', None)
扔进去,但它不起作用。任何和所有帮助将不胜感激。提前谢谢你。
嗯,在Python中没有Null
,而dict的setdefault
默认是None
。顺便说一句,字典不能通过 Python 中的点运算符访问(遗憾的是,我想念 JS 的功能)所以基本上......我不认为 record
是字典,而是一个对象.要检查对象是否具有 属性,您可以执行 hasattr(record, 'value1')
例如。
考虑到所有这些,要将所有内容都放在一个表达式中,您可以这样做:
hasattr(record, 'value1') and str(record.value1) or None
这是一个布尔表达式,在 Python 中,您可以计算布尔表达式而无需将值完全转换为布尔值。因此,该表达式将为您提供 str(record.value1)
的值或简单的 None
.
抱歉,如果此答案中有任何错误,我对 Soap 库不熟悉。
编辑: 正如@plaes 在评论中指出的那样,getattr(record, 'value1', None)
是一种更短、更简单的方法。谢谢你:)