所以我遵循的是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:名称“ engine”未定义
不确定为什么说“引擎”没有定义。我显然已经在尝试下对其进行了定义。任何帮助将不胜感激。
删除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,在获取项中 o = self.datakey KeyError:无
在处理上述异常期间,发生了另一个异常:
回溯(最近一次通话最近):文件“ 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(驱动程序名称,调试)文件“ C:\ Users \ This PC \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pyttsx3 \ engine.py”, 第52行,初始化 self.proxy = driver.DriverProxy(弱引用.proxy(self),driverName,调试)文件“ C:\ Users \ This PC \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pyttsx3 \ driver.py”, 第75行,初始化 self._module = importlib.import_module(name)文件“ C:\ Users \ This PC \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ importlib__init __。py”, import_module中的第127行 在_gcd_import文件中,返回_bootstrap._gcd_import(name [level:],程序包,级别)文件“”,第1006行 _find_and_load文件中的“”行983 “”,第967行,在_find_and_load_unlocked中 _load_unlocked中的文件“”,行677,
文件“”,第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:没有名为“ win32com”的模块[以0.1秒完成]
答案 0 :(得分:1)
看到完整的错误日志转储(没有{{ img.property_name }}
块隐藏错误)后,最后一行是文本:
try
我建议您查看Jefferson Puchalski's answer again。 (提示:这是在告诉您您缺少line 3, in import win32com.client ModuleNotFoundError: No module named 'win32com' [Finished in 0.1s]
所依赖的模块)
您正在尝试分配pyttsx3
,但是如果失败则声明engine = pyttsx3.init()
。但是由于voices = engine.getProperty('voices')
块已失败,因此尚未声明try
。
下面,我分配engine
,并跳过engine = None
形成的else
块;而不是使用条件来确定它是否为try
(它在创建None
时正常工作)。
engine
答案 1 :(得分:0)
尝试在try / catch块中输入导入,并检查导入后是否未定义,因此引发异常。 在模块官方网站上,查找您的控制台日志中是否存在某些错误,
修复可能的错误:
No module named win32com.client
No module named win32
No module named win32api
并尝试
pip install pypiwin32
另外显示您的日志,以便我们更好地了解情况!
答案 2 :(得分: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)
答案 3 :(得分:0)
在Ubuntu上,我遇到了同样的问题。迄今为止最简单的修复方法:
sudo apt install libespeak1
答案 4 :(得分:-1)
问题是python在第14行执行语句时未声明engine
。
为什么?
可能是因为try
失败,所以脚本跳到了else
。 engine
的位置也未定义。
由于您的脚本非常依赖engine
对象,因此我建议以下几点:
import speech_recognition as sr
import pyttsx3
voices = []
try:
engine = pyttsx3.init()
except ImportError:
print('Import Issue')
except RuntimeError:
print('Runtime Issue')
voices = engine.getProperty('voices')
for voice in voices:
print(voice.id)