[英]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实例没有属性“ value3”
科技部 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)
是一种更短,更容易的方法。 谢谢皮尔斯:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.