我有一本字典,
如下所示[{
“a”: {
“uuid”: “4458”,
“created_at”: “2022-10-19 12:20”,
“source_platform”: “abc”,
“platform”: “UK”
},
“b”:[],
“c”: [],
“d”: [],
“f”: [],
“e”: [],
“g”: [],
“h”: [],
“i”: [],
“j”: {}
}]
如果诸如"b"或"j"之类的键的列表为空,我需要返回"no_info"。
但是当我使用此功能时
def get_lead_first_platform(data: dict) -> str:
try:
if isinstance(data.get('b'), list):
if data.get('b')[0].get('ad_source'):
return data.get('b')[0].get('ad_source')
else:
return 'no_info'
except Exception as e:
print(f'{inspect.stack()[0][3]} -- {e}')
return None
它给了我这个错误get_lead_first_platform -- 'list' object has no attribute 'get'
您需要在访问列表之前进行空检查。
def get_lead_first_platform(data: dict) -> str:
try:
if isinstance(data.get('b'), list):
if len(data.get('b')[0]) > 0:
return data.get('b')[0].get('ad_source')
else:
return 'no_info'
except Exception as e:
print(f'{inspect.stack()[0][3]} -- {e}')
return None
你没有你所说的"有字典"。您在这里拥有一个包含字典的列表。因此,如果将其传递给函数,则实际上是在列表上调用.get()
。
所以data.get("b")
会
[{
“a”: {
“uuid”: “4458”,
“created_at”: “2022-10-19 12:20”,
“source_platform”: “abc”,
“platform”: “UK”
},
“b”:[],
“c”: [],
“d”: [],
“f”: [],
“e”: [],
“g”: [],
“h”: [],
“i”: [],
“j”: {}
}].get("b")
也许尝试执行get_lead_first_platform(data[0])
.
编辑:
使用.get()
修复错误后,如果语句"b"为空list
,您将遇到语句data.get('b')[0]
的"索引超出范围"错误。