Python 解析 Json - "X is None" 不会捕获空对象



我是Python的新手,我正在尝试使用Python解析Json文件。 JSON 文件是嵌套文件。当我尝试精确执行"conversation_id"项时,包含此项的列表和上面的列表有时可能是空的。我希望将空列表替换为字符串"N/A",否则抓住该项目。我使用的代码如下:

for log in data['logs']:
print("Processing log "+log['log_id'])
logcolumns=[]
if log['request'] is None:
logcolumns.append("N/A")
elif log['request']['context'] is None:
logcolumns.append("N/A")
else:
logcolumns.append(log['request']['context']['conversation_id'])
try:
print("t".join(logcolumns),file = conv_tsv)
except KeyError:pass
del logcolumns

我得到的回溯错误是

Processing log cafa1077-f479-4c55-ac34-3bc3ebbb41fc
Traceback (most recent call last):
File "conversation_log_2.py", line 43, in <module>
logcolumns.append(log['request']['context']['conversation_id'])
KeyError: 'conversation_id'

与此日志 ID 关联的"请求"列表在 json 文件中如下所示:

{"request": {"input": {}, "context": {}},

完整的请求列表如下所示:

{"request": {"input": {"text": "haha"}, "context": {"conversation_id": "328d2320-f488-4f46-b71f-6cdfb1b79106", "system": {"dialog_stack": [{"dialog_node_s": "root"}], "dialog_turn_counter": 1, "dialog_request_counter": 1, "_node_output_map_s": "{"Welcome":[0,1,0]}", "branch_exited_s": "true", "branch_exited_reason_s": "completed"}}}, 

当我转到输出文件时,这是conv.tsv,输出中有N/A

你似乎对语法很感兴趣。try/except应该包裹if/elif吗?你真的想要if/elif吗?

请注意,log['request'] is None不会测试键的值是否为空字典。

可以使用在找不到键时返回默认值的.get方法:

logcolumns.append(log.get('request', {}).get('context', {}).get('conversation', 'N/A'))

或者更好的是,如果缺少任何键,请使用try/except附加默认值:

try:
logcolumns.append(log['request']['context']['conversation_id'])
except KeyError:
logcolumns.append('N/A')

相关内容

  • 没有找到相关文章

最新更新