Перехват ошибок из импортированного модуля
Есть модуль PyAudio в котором при запуске, если нет микрофона по переданному индексу устройства speech_recognition.Microphone(device_index=1). Но если данного устройства нет то появляется ошибка - OSError: [Errno -9998] Invalid number of channels. Вопрос заключается в том чтобы как-то перехватить эту ошибку в Try/Except.
Код взят и уменьшен отсюда --> Видео на YouTube
from time import sleep
import speech_recognition as sr
from fuzzywuzzy import fuzz
def callback(recognizer, audio):
pass
try:
r = sr.Recognizer()
m = sr.Microphone(device_index=1)
stop_listening = r.listen_in_background(m, callback)
################################################
except OSError:
print("Микрофон не найден")
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# |||||||||||||||||||||||||||||||||
# то, что я попробывал
################################################
while True:
sleep(0.1)
Ошибка:
Exception in thread Thread-1 (threaded_listen):
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
self.run()
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\speech_recognition\__init__.py", line 690, in threaded_listen
with source as s:
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\speech_recognition\__init__.py", line 138, in __enter__
self.audio.open(
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\pyaudio.py", line 750, in open
stream = Stream(self, *args, **kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\pyaudio.py", line 441, in __init__
self._stream = pa.open(**arguments)
OSError: [Errno -9998] Invalid number of channels
Ответы (1 шт):
Автор решения: Kickwall
→ Ссылка
Ошибка все равно появляется, но теперь ее можно отловить
from time import sleep
import speech_recognition as sr
from fuzzywuzzy import fuzz
def callback(recognizer, audio):
pass
r = sr.Recognizer()
m = sr.Microphone(device_index=1)
try: <---+++
with m as source: +++
r.adjust_for_ambient_noise(source) +++
except OSError: +++
print("Микрофон не обнаружен!!!") <---+++
stop_listening = r.listen_in_background(m, callback)
while True:
sleep(0.1)
Микрофон не обнаружен!!!
Exception in thread Thread-1 (threaded_listen):
Traceback (most recent call last):
...
OSError: [Errno -9998] Invalid number of channels