给定以下通用代码:
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
的MOST将包含所有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)
是一种更短、更容易的方法。谢谢你,plaes:)