2016-08-17 70 views
0

中的屬性錯誤我會說我正在尋找答案,但無法找到它,並且對於如此基本的問題感到抱歉。我使用TTS創建了程序。我創建了一個名爲「list_merge」的全局變量,但大多數人都說全局變量是壞的。所以我決定把這個列表放入init中。 PS。忽略空白,它們的存在只是因爲我在這裏複製了它。如何在開始時解決python

的錯誤是: AttributeError的: 'Ver2ProjectWithTTS' 對象有沒有屬性 'list_merge'

import json 
import pyttsx 
from openpyxl import load_workbook 

class Ver2ProjectWithTTS(object): 

    def __init__(self): 
     self.read_json_file() 
     self.read_xml_file() 
     self.say_something() 
     self.list_merge = [] 

    def read_json_file(self): 
     with open("json-example.json", 'r') as df: 
      json_data = json.load(df) 
      df.close() 
     for k in json_data['sentences']: 
      text_json = k['text'] 
      speed_json = int(k['speed']) 
      volume_json = float(k['volume']) 
      dict_json = {'text': text_json, 'speed': speed_json, 'volume': volume_json} 
      self.list_merge.append(dict_json) 

    def read_xml_file(self): 
     tree = et.parse('xml-example.xml') 
     root = tree.getroot() 
     for k in range(0, len(root)): 
      text_xml = root[k][0].text 
      speed_xml = int(root[k][1].text) 
      volume_xml = float(root[k][2].text) 
      dict_xml = {'text': text_xml, 'speed': speed_xml, 'volume': volume_xml} 
      self.list_merge.append(dict_xml) 

    def say_something(self): 
     for item in self.list_merge: 
      engine = pyttsx.init() 
      engine.getProperty('rate') 
      engine.getProperty('volume') 
      engine.setProperty('rate', item['speed']) 
      engine.setProperty('volume', item['volume']) 
      engine.say(cleared_text) 
      engine.runAndWait() 

if __name__ == '__main__': 
    a = Ver2ProjectWithTTS() 

我越來越 AttributeError的: 'Ver2ProjectWithTTS' 對象有沒有屬性 'list_merge'

任何想法如何避免這個錯誤?嗯,我的客觀性不好,我只是不能解決這個問題而繼續前進。 PS。在init初始化之前使用全局變量def它正常工作。 感謝您的幫助:)

+0

什麼行是拋出這個錯誤? – dhdavvie

+0

AttributeError:'Ver2ProjectWithTTS'對象沒有屬性'list_merge' – degath

+1

當語法成爲語法的一部分時,很難'忽略空格'。這是你的實際縮進嗎? – polku

回答

3

您必須在使用前設置如果第一:

class Ver2ProjectWithTTS(object): 

    def __init__(self): 
     # first set it 
     self.list_merge = [] 
     self.read_json_file() 
     self.read_xml_file() 
     self.say_something() 

反正不做任何先進的邏輯構造,這不是一個好的做法。做一個方法,而不是:

class Ver2ProjectWithTTS(object): 

    def __init__(self): 
     # first set it 
     self.list_merge = [] 

    def do_the_job(self): 
     self.read_json_file() 
     self.read_xml_file() 
     self.say_something() 

    ... 

instance = Ver2ProjectWithTTS() 
instance.do_the_job() 
+0

謝謝,很好的答案。 :-) – degath

相關問題