dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1935) [Flask в Google App Engine] - PullRequest
0 голосов
/ 04 апреля 2020

Я учитель английского языка в Японии. Из-за COVID-19 моя школа была закрыта на месяц и будет еще на месяц. Поэтому я создал веб-приложение, которое мои студенты могут использовать для улучшения своего английского языка sh в домашних условиях.

Веб-приложение очень простое.

  1. веб-сайт с текстовым полем

  2. вы вводите предложение в текстовое поле и нажимаете кнопку «отправить»

  3. , вы можете скачать mp3-файл, который создан Google Cloud Text to Speech API

Вот исходный код моего приложения. https://github.com/k2kszk/speech-synthesizer Я использую Flask в стандартной среде Google App Engine Python3 .7.

Мои студенты начали использовать веб-приложение, затем я обнаружил сообщения об ошибках в консоли Google Cloud Platform , Страница консоли «Облачные отчеты» Google Cloud Platform. Вот сообщение.

File "/srv/main.py", line 20, in index: voiceid = next(voice for voice in request.form.getlist('voiceId[]') if accent in voice)
at dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1935)
at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1949)
at reraise (/env/lib/python3.7/site-packages/flask/_compat.py:39)
at handle_user_exception (/env/lib/python3.7/site-packages/flask/app.py:1820)
at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1951)
at wsgi_app (/env/lib/python3.7/site-packages/flask/app.py:2446)

Я искал Inte rnet, но не смог найти даже в чем проблема. Как я могу решить эту ошибку? Не могли бы вы дать мне какой-нибудь совет или информацию?

Заранее спасибо.

С уважением, Казу

++++++++++++++ *

Вот мой main.py.

#./advance/main.py
from flask import Flask
from flask import render_template
from flask import request
from flask import send_file
import os
from google.cloud import texttospeech

app = Flask(__name__)

@app.route("/", methods=['POST', 'GET'])
def index():
    if request.method == "POST":
        if request.form['Radio'] == 'normal':
            ssml = '<speak><prosody rate="slow">' + request.form['text'] + '</prosody></speak>'
        else:
            ssml = '<speak>' + request.form['text'] + '</speak>'

        accent = request.form['accent']
        voiceid = next(voice for voice in request.form.getlist('voiceId[]') if accent in voice)
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="credentials.json"

        client = texttospeech.TextToSpeechClient()
        input_text = texttospeech.types.SynthesisInput(ssml=ssml)
        voice = texttospeech.types.VoiceSelectionParams(
            language_code=accent,
            name=voiceid)

        audio_config = texttospeech.types.AudioConfig(
            audio_encoding=texttospeech.enums.AudioEncoding.MP3)

        response = client.synthesize_speech(input_text, voice, audio_config)

        # The response's audio_content is binary.
        with open('/tmp/output.mp3', 'wb') as out:
            out.write(response.audio_content)

        return send_file("/tmp/output.mp3",as_attachment=True)
    else:
        return render_template("index.html")

if __name__ == "__main__":
    app.run()

1 Ответ

0 голосов
/ 13 апреля 2020

В этом случае проблема находится в строке voiceid.

voiceid = next(voice for voice in request.form.getlist('voiceId[]') if accent in voice)

, что повышает StopIteration, поскольку его критерии выбора не удовлетворены. Вы можете изменить его на

voiceid = voiceid = next((voice for voice in request.form.getlist('voiceId[]') if accent in voice), None) 

Тогда voiceid будет установлен на None (или другое указанное вами значение) в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...