KeyError в коде Python, хотя Key присутствует - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь создать код разделителя каналов для отделения транскрипции, которая печатается в файле JSON.

У меня есть следующий код:

import json
import boto3

def lambda_handler(event, context):
    if event:
        s3 = boto3.client("s3")
        s3_object = event["Records"][0]["s3"]
        bucket_name = s3_object["bucket"]["name"]
        file_name = s3_object["object"]["key"]
        file_obj = s3.get_object(Bucket=bucket_name, Key=file_name)
        transcript_result = json.loads(file_obj["Body"].read())

        segmented_transcript = transcript_result["results"]["channel_labels"]
        items = transcript_result["results"]["items"]

        channel_text = []
        flag = False
        channel_json = {}
        for no_of_channel in range (segmented_transcript["number_of_channels"]):
            for word in items:
                for cha in segmented_transcript["channels"]:
                    if cha["channel_label"] == "ch_"+str(no_of_channel):
                        end_time = cha["end_time"]
                        if "start_time" in word:
                            if cha["items"]:
                                for cha_item in cha["items"]:
                                    if word["end_time"] == cha_item["end_time"] and word["start_time"] == cha_item["start_time"]:
                                        channel_text.append(word["alternatives"][0]["content"])
                                        flag = True
                        elif word["type"] == "punctuation":
                            if flag and channel_text:
                                temp = channel_text[-1]
                                temp += word["alternatives"][0]["content"]
                                channel_text[-1] = temp
                                flag = False
                                break

            channel_json["ch_"+str(no_of_channel)] = ' '.join(channel_text)
            channel_text = []
    print(channel_json)
    s3.put_object(Bucket="aws-speaker-separation", Key=file_name, Body=json.dumps(channel_json))

    return{
        'statusCode': 200,
        'body': json.dumps('Channel transcript separated successfully!')
    }

Однако при запускеэто, я получаю сообщение об ошибке в строке 23, говорящее:

[ERROR] KeyError: 'end_time'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 23, in lambda_handler
    end_time = cha["end_time"]

Я не совсем понимаю, почему эта ошибка происходит, как в моем коде JSON, и нужно прочитать следующее:

Параметры кода JSON

Есть идеи, почему появляется эта ошибка?

1 Ответ

0 голосов
/ 31 октября 2019

cha - это канал, end_time - это слой глубже в элементах вашего канала. Для доступа к элементам вашего канала выполните:

for item in cha["items"]:
    print(item["end_time"])
...