给出以下通用代码:
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)
,但它不起作用。任何和所有的帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
嗯,Python中没有Null
,而且dict的setdefault
的默认默认值是None
。顺便说一句,字典不能通过Python中的点运算符访问(遗憾的是,我想念JS的功能)所以基本上......我不认为record
是一个字典,而是一个对象。要检查对象是否具有属性,您可以执行hasattr(record, 'value1')
。
现在考虑到这一切,要将所有内容保存到单个表达式中,您可以执行以下操作:
hasattr(record, 'value1') and str(record.value1) or None
这是一个布尔表达式,在Python中,您可以在不将值完全转换为bools的情况下计算布尔表达式。因此,该表达式将为您提供值str(record.value1)
或仅None
。
对不起,如果这个答案中的任何内容有误,我不熟悉Soap库。
修改:正如@plaes在评论中指出的那样,getattr(record, 'value1', None)
是一种更短更简单的方法。谢谢你们:)