-2

所以我在 youtube 上关注了一个简单的教程,无论我做什么,我都会遇到同样的问题。

这是我使用的代码。

import speech_recognition as sr
import pyttsx3


voices = []
engine = pyttsx3.init()

voices = engine.getProperty('voices')
for voice in voices:
    print(voice.id)

我在 sublimeText3 中写这个。每次我构建这个,我都会得到同样的错误。

文件“C:\Users\This PC\Desktop\Py\introTest.py”,第 14 行,在 voices = engine.getProperty('voices') NameError: name 'engine' is not defined

不知道为什么它说“引擎”没有定义。我在try下明确定义了。任何帮助,将不胜感激。

删除 try/excepts 后,我有很多新错误。这是构建日志。

回溯(最后一次调用):文件“C:\Users\This PC\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyttsx3__init__.py”,第 44 行, init eng = _activeEngines[ driverName] 文件“C:\Users\This PC\AppData\Local\Programs\Python\Python37-32\lib\weakref.py”,第 137 行,在getitem o = self.datakey KeyError : None

在处理上述异常的过程中,又出现了一个异常:

Traceback(最近一次调用最后一次):文件“C:\Users\This PC\Desktop\Py\demo.py”,第 7 行,在 engine = pyttsx3.init() 文件“C:\Users\This PC\AppData\ Local\Programs\Python\Python37-32\lib\site-packages\pyttsx3__init__.py”,第 46 行,在 init eng = Engine(driverName, debug) 文件“C:\Users\This PC\AppData\Local\Programs\ Python\Python37-32\lib\site-packages\pyttsx3\engine.py”,第 52 行,在init self.proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug) 文件“C:\Users\此 PC\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyttsx3\driver.py",第 75 行,在init self._module = importlib.import_module(name) File "C:\Users\This PC\AppData\Local\Programs\Python\Python37-32\lib\importlib__init__.py",第 127 行,在 import_module return _bootstrap._gcd_import(name [level:], package, level) File "", line 1006, in _gcd_import File "", line 983, in _find_and_load File "", line 967, in _find_and_load_unlocked File "", line 677, in _load_unlocked
File "", line 728,在 exec_module 文件“”中,第 219 行,在 _call_with_frames_removed 文件中“C:\Users\This PC\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pyttsx3\drivers\sapi5.py”,第 3 行,在 import win32com.client ModuleNotFoundError: No module named 'win32com' [Finished in 0.1s]

4

5 回答 5

1

在看到完整的错误日志转储(没有try块隐藏错误)后,最后一位是文本:

line 3, in import win32com.client ModuleNotFoundError: No module named 'win32com' [Finished in 0.1s]

我建议再次查看 Jefferson Puchalski 的回答。(提示:它告诉你你缺少一个pyttsx3依赖的模块)


您正在尝试分配engine = pyttsx3.init(),但是当/如果它失败时,您然后声明voices = engine.getProperty('voices'). 但由于该try块已失败,engine尚未声明。

下面,我分配engine = None并跳过块的else形式try;而是使用条件来确定它是否None存在(它在创建时正确工作engine)。

import speech_recognition as sr
import pyttsx3


voices = []
engine = None

try:
    engine = pyttsx3.init()
except ImportError:
    print('Import Issue')
except RuntimeError:
    print('Runtime Issue')

if (engine is not None):
    voices = engine.getProperty('voices')
    for voice in voices:
        print(voice.id)
else:
    print("Something went wrong")
于 2018-08-23T20:32:32.717 回答
0

尝试在 try/catch 块中输入导入,并检查导入后是否未定义,因此抛出异常。查看模块官方网站,查看控制台日志中的一些错误,

修复可能的错误: No module named win32com.client No module named win32 No module named win32api

试试这个

pip install pypiwin32

另外显示您的日志,以便我们更好地了解情况!

于 2018-08-23T20:22:05.033 回答
0

在 Ubuntu 上,我遇到了同样的问题。有史以来最简单的修复:

sudo apt install libespeak1

于 2020-02-09T14:05:10.413 回答
0
import speech_recognition as sr
import pyttsx3

voices = [] 
try:
    engine = pyttsx3.init()
except ImportError:
    print('Requested driver is not found')
    engine = None
except RuntimeError:
    print('Driver fails to initialize')
    engine = None

if engine is None:
    print('Something went wrong')

else:
    voices = engine.getProperty('voices')
    for voice in voices:
        print(voice.id)
于 2019-04-30T20:03:53.830 回答
0

嗨,我遇到了类似的问题,这就是我设法轻松改变声音的方法

import pyttsx3

voices = []

eng = pyttsx3.init()

voices = eng.getProperty('voice')

eng.setProperty('voice',voices[1].id)
eng.say("Some text here")
eng.runAndWait()
于 2021-08-25T06:56:14.490 回答