在Python中,当我想调用字典中的空值列表时,收到一个错误

vjrehmav  于 2022-12-15  发布在  Python
关注(0)|答案(3)|浏览(511)

我有一本字典,如下所示

[{
  “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'

vohkndzv

vohkndzv1#

您需要在访问列表之前进行空检查。

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
yacmzcpb

yacmzcpb2#

你并不像你说的那样“有一个字典”,你在这里有一个包含字典的列表,因此如果你把它传递给你的函数,你实际上是在一个列表上调用.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()错误后,如果list“B”为空,则data.get('b')[0]语句将出现“index out of range”错误。

s6fujrry

s6fujrry3#

yes列表没有属性get,您应该尝试使用join。

相关问题