Python解析列表,其中数据并不总是存在

2024-06-16 14:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

假设以下python代码中的cast_值、directors_值、producers_值和screenswriters_值并不总是充满数据:

def get_plist_names(name_dict):
    return [o["string"] for o in (name_dict if isinstance(name_dict, list) else [name_dict])]

plist_metadata = json.loads(dump_json)
dict = plist_metadata['plist']['dict']
zipped = zip(dict["key"], dict["array"])
result = {"cast": [], "directors": [], "screenwriters": [], "producers": [], } | \
                         {k: get_plist_names(v["dict"]) for k, v in zipped}
cast_value = (', '.join(result.get("cast", "")))
directors_value = (', '.join(result.get("directors", "")))
producers_value = (', '.join(result.get("producers", "")))
screenwriters_value = (', '.join(result.get("screenwriters", "")))

如果例如[“cast”]没有数据,为什么会出现以下错误(至少我假设问题可能在这里):

TypeError: string indices must be integers

即使演员阵容是空的,有什么方法可以让我继续前进

完整跟踪:

celery           | [2021-06-16 15:04:50,761: ERROR/ForkPoolWorker-15] Task Import Descriptor[6bd6c384-f800-4875-b78b-0e18a7a267e5] raised unexpected: TypeError('string indices must be integers')
celery           | Traceback (most recent call last):
celery           |   File "/venv/lib/python3.9/site-packages/celery/app/trace.py", line 450, in trace_task
celery           |     R = retval = fun(*args, **kwargs)
celery           |   File "/venv/lib/python3.9/site-packages/celery/app/trace.py", line 731, in __protected_call__
celery           |     return self.run(*args, **kwargs)
celery           |   File "/app/Core/tasks.py", line 169, in import_descriptor
celery           |     {k: get_plist_names(v["dict"]) for k, v in zipped}
celery           |   File "/app/Core/tasks.py", line 169, in <dictcomp>
celery           |     {k: get_plist_names(v["dict"]) for k, v in zipped}
celery           | TypeError: string indices must be integers

提前谢谢


Tags: nameinforgetstringnamesvalueresult
1条回答
网友
1楼 · 发布于 2024-06-16 14:18:00

假设错误发生在cast_value中,您可以尝试将get运算符与可选的空字符串(如果为空)一起使用

cast_value = (', '.join(result.get("cast", "")))

但是,我会注意到,下面返回的是一个空字符串,而不是一个类型错误,因此代码中的其他地方可能存在问题

result = {"cast": []}
','.join(result['cast'])

输出:

"" # empty string

相关问题 更多 >