Как исправить ошибку модуля pyttsx3 в python 3.8

#python #python-3.x #pyttsx3

#python #python-3.x #pyttsx3

Вопрос:

При использовании модуля pyttsx3 в моей виртуальной среде python 3.8.5 с помощью этого кода:

 import pyttsx3

def speak(speak):
    engine = pyttsx3.init()
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[1].id)
    engine.getProperty('rate')
    engine.setProperty('rate', 155)
    engine.say(speak)
    engine.runAndWait()

speak("Hello")
  

Я получаю эту ошибку при компиляции приведенного выше кода:

 Traceback (most recent call last):
  File "D:virtualenvvenvlibsite-packagespyttsx3__init__.py", line 20, in init
    eng = _activeEngines[driverName]
  File "c:usersCurrentUserappdatalocalprogramspythonpython38-32libweakref.py", line 131, in __getitem__
    o = self.data[key]()
KeyError: None

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:/virtualenv/hehe.py", line 12, in <module>
    speak("Hello")
  File "d:/virtualenv/hehe.py", line 4, in speak
    engine = pyttsx3.init()
  File "D:virtualenvvenvlibsite-packagespyttsx3__init__.py", line 22, in init
    eng = Engine(driverName, debug)
  File "D:virtualenvvenvlibsite-packagespyttsx3engine.py", line 30, in __init__
    self.proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug)
  File "D:virtualenvvenvlibsite-packagespyttsx3driver.py", line 50, in __init__
    self._module = importlib.import_module(name)
  File "c:usersCurrentUserappdatalocalprogramspythonpython38-32libimportlib__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "D:venvlibsite-packagespyttsx3driverssapi5.py", line 1, in <module>
    import comtypes.client  # Importing comtypes.client will make the gen subpackage
  File "D:virtualenvvenvlibsite-packagescomtypes__init__.py", line 1176, in <module>
    class IPersist(IUnknown):
  File "D:virtualenvvenvlibsite-packagescomtypes__init__.py", line 1180, in IPersist
    COMMETHOD([], HRESULT, 'GetClassID',
  File "D:virtualenvvenvlibsite-packagescomtypes__init__.py", line 1099, in COMMETHOD
    from comtypes.automation import VARIANT
  File "D:virtualenvvenvlibsite-packagescomtypesautomation.py", line 4, in <module>
    import decimal
  File "c:usersCurrentUserappdatalocalprogramspythonpython38-32libdecimal.py", line 3, in <module>
    from _decimal import *
AttributeError: module 'numbers' has no attribute 'Number'
  

Каждый раз, когда я запускаю данный код python, возникает вышеуказанная ошибка, и я использую VS code в качестве среды разработки в Windows 10

Ответ №1:

Извлеките pyttsx3.init() из функции. Это не должно вызываться повторно. Он должен вызываться только один раз.

 import pyttsx3
engine = pyttsx3.init()
def speak(word):
   #set engine properties
   engine.say(word)
   engine.runAndWait()

speak('Speak')
  

Комментарии:

1. обновите номера с помощью pip или переустановите pyttx3

Ответ №2:

Это должно сработать:

 import pyttsx3
engine = pyttsx3.init()

def speak(word):
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[1].id)
    rate = engine.getProperty('rate')
    engine.setProperty('rate', 155)
    engine.say(word)
    engine.runAndWait()

speak("Hello")
  

Комментарии:

1. Я немного отредактировал код. Теперь это должно сработать. Попробуйте и дайте мне знать.