Я продолжаю получать UnboundLocalError с speech_output в моем навыке alexa - PullRequest
0 голосов
/ 24 января 2019

Я начал получать эту ошибку, но она работала раньше, поэтому я не уверен, что изменилось.

Файл "/var/task/lambda_function.py", строка 126, в get_elevator_status speech_output + = 'On' + лифты ['line'] + 'на станции' + Лифты ['станция'] + \ UnboundLocalError: локальная переменная 'speech_output' ссылка перед назначением

def get_elevator_status():
    session_attributes = {}
    card_title = "Septa Elevator Status"
    should_end_session = True

    response = urllib2.urlopen(API_BASE_URL + "/elevator")
    septa_elevator_status = json.load(response)

    if septa_elevator_status['meta']['elevators_out'] == 0:
        speech_output = 'All Elevators are currently operational'
    else:
        for elevators in septa_elevator_status['results']:
            speech_output += 'On' + elevators['line'] + ' at station ' + elevators['station'] + \
                ' the ' + elevators['elevator'] + \
                ' elevator has ' + elevators['message'] + ' . '

    return build_response(session_attributes, build_speechlet_response(
        card_title, speech_output, reprompt_text, should_end_session))

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Проверьте содержимое septa_elevator_status['results']. Если он пуст (предположительно, так и происходит), код в цикле for не будет выполнен и speech_output не будет определен.

0 голосов
/ 24 января 2019

Вы не определили, что означает speech_output в другом случае.

speech_output определяется, если septa_elevator_status['meta']['elevators_out'] == 0, но не иначе. Предложение else должно либо определять speed_output, либо определяться перед блоком if / else. Помните: a += b означает a, что бы это ни было, плюс b. Итак, если a не было определено, вы выдадите ошибку.

Предположительно, раньше это не было бы ошибкой, потому что в случае if оценка была истинной, что означало, что был определен speech_output, но теперь регистр if не является истинным, поэтому speech_output больше не определяется.

...