Python简单教程变量未定义问题

时间:2018-08-23 20:15:54

标签: python pyaudio pyttsx

所以我遵循的是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秒完成]

5 个答案:

答案 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失败,所以脚本跳到了elseengine的位置也未定义。

由于您的脚本非常依赖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)
相关问题