假设以下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
提前谢谢
假设错误发生在
cast_value
中,您可以尝试将get
运算符与可选的空字符串(如果为空)一起使用但是,我会注意到,下面返回的是一个空字符串,而不是一个类型错误,因此代码中的其他地方可能存在问题
输出:
相关问题 更多 >
编程相关推荐