AttributeError: 'str' object has no attribute 'startswitch'

_HAPPY_

Новичок
Пользователь
Апр 9, 2020
23
1
3
вот сам код:

Python:
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime

opts = {
    "alias": ('змей', 'гарыныч', 'горыныч', 'змейка', 'змеечка', 'змеюсик'),
    "tbr": ('лоли', 'скажи', 'произнеси', 'переведи', 'покажи','сколько','расскажи', 'пошути', 'покажи', 'покаж'),
    "cmds": {
        "ctime": ("сколько время", "текущее время", "время", "который час", "тайм", "сейчас времени"),
        "radio": ("включи радио", "вруби радио", "вруби музыку", "включи музыку", "вруби музло", "влючи музло", "вруби музон", "включи музон", "спой песню", "спой песенку", "включи песню", "включи песенку", "вруби песню"),
        "stupid1": ("пошути", "расскажи анекдот", "расскажи шутку", "анекдот", "рассмеши", "рассмеши меня", "рассмеши нас"),
    }
}


# Функции
def speak(what):
    print( what )
    speak_engine.say( what )
    speak_engine.runAndWait()
    speak_engine.stop()

def callback(recognizer, audio):
    try:
        voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
        print("[log] Распознано: " + voice)

        if voice.startswitch(opts["alias"]):
            cmd = voice

            for x in opts["alias"]:
                cmd = cmd.replace(x, "").strip()

            for x in opts ["tbr"]:
                cmd = cmd.replace(x, "").strip()

            # raspoznayom i vipolnyaem comandu
            cmd = recognize_cmd(cmd)
            execute_cmd(cmd["cmd"])
        
    except sr.UnknownValueError:
        print("[log] Голос не распознан")
    except sr.RequestError as e:
        print("[log] Неизвестная ошибка!")
    
        
def recognize_cmd(cmd):
    RC = {"cmd": '', precent: 0}
    for c, v in opts ['cmd'].items():

        for x in v:
            vrt = fuzz.ratio(cmd, x)
            if vrt > RC['percent']:
                RC['cmd'] = c
                RC['percent'] = vrt

    return RC

def execute_cmd(cmd):
    if cmd == 'cime':
        now =  datetime.datetime.now()

        speak("Сейчас " + str(now.hour) + "часов" + str(now.minute) + "минут")

    elif cmd == 'radio':
        pass

    elif cmd == 'stupid1':
        speak("Я не умею петь ведь я змея и разраб не научил меня..., однако говорящая")

    else:
        speak("Команда не распознана"),
        print("Команда не распознана")

# запуск

r = sr.Recognizer()
m = sr.Microphone(device_index = 0)

speak_engine = pyttsx3.init()

speak("Здравствуйте")
speak("Змейка слушает")

stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1) # loop

вроде работает, но поесле произношения комманды выдаёт ошибку:
Здравствуйте # Так и должно быть
Змейка слушает # Так и должно быть
[log] Голос не распознан # Так и должно быть
[log] Распознано: расскажи анекдот # Так и должно быть
Exception in thread Thread-1: # А с этого момента всё пошло не так...
Traceback (most recent call last):
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\site-packages\speech_recognition\__init__.py", line 697, in threaded_listen
if running[0]: callback(self, audio)
File "C:\Users\Admin\Desktop\AssistentZmey\Zmey.py", line 31, in callback
if voice.startswitch(opts["alias"]):
AttributeError: 'str' object has no attribute 'startswitch'
 
D

deleted-user

Guest
мб потому что startswith, а не startswitch
у тебя строка "начинается с" а не "старт ведьмы"
 
  • Мне нравится
Реакции: Student и _HAPPY_

Artesius

Новичок
Пользователь
Апр 30, 2020
4
3
3
Вся ошибка, в целом-то, и описана.
Используешь startswitch вместо startswith
 

_HAPPY_

Новичок
Пользователь
Апр 9, 2020
23
1
3
мб потому что startswith, а не startswitch
у тебя строка "начинается с" а не "старт ведьмы"
спасибо большое xD я не заметил очень слепой (-2,5)
 
D

deleted-user

Guest
спасибо большое xD я не заметил очень слепой (-2,5)
ну в ошибке написано тоже самое что и я написал
 

Форум IT Специалистов