Python 3.8. Не прерывать выполнение программы в случае ошибки. "Continue not properly in loop"
После того как универ перевели на удаленку и лекции стали читать онлайн, наш лектор захотел видеть от студентов обратную связь в виде полного конспекта. Лекцию читают быстро, а пишу я медленно, поэтому писать конспект вручную - не вариант. Переписывать с диктофона - извините, у меня и до этого работы хватало. Задачу нужно решить средствами автоматизации.
Я использую модуль для python, который называется speech_recognition. Мне нужно, чтобы программа работала в "поточном" режиме, раз за разом захватывая маленькие кусочки речи и преобразуя их в текст. Для этого я сначала зацикливал функцию, ответственную за процесс считывания-записи. Программа работала, но при тестировании обнаружилась маленькая неприятность: если алгоритм считывания звука встречал помехи (пение, нечленораздельную речь, длительное молчание), он выдавал ошибку типа speech_recognition.UnknownValueError и прерывал выполнение программы. Это означает, что в любой момент лекции программа может завершиться с ошибкой, а такого допустить нельзя.
Я заменил тело цикла, вызывающего функцию, на конструкцию try-except и установил команду continue в качестве инструкции на случай обнаружения ошибки. Программа перестала работать, а интерпретатор выдает только: "continue not properly in loop".
Подскажите, пожалуйста, где я ошибаюсь?
output_file = open("output.txt", "w")
def record_voice():
recognizer = speech_recognition.Recognizer()
with speech_recognition.Microphone(device_index = 1) as source:
print('Записываю аудио')
audio = recognizer.listen(source)
query = recognizer.recognize_google(audio, language = 'ru-RU')
print(f'Вы сказали: {query.lower()}') #вывод текста в консоль
output_file.writelines(f'{query}') #вывод текста в файл
try:
record_voice()
except:
continue #not properly in loop
output_file.close()
Ответы (1 шт):
continue может быть только в цикле, чтобы завершить программу используйте метод exit
try:
record_voice()
except:
exit()
Если вам надо вызывать record_voice пока она не завершить правильно, то надо добавить while True и break
while True:
try:
record_voice()
break
except:
continue