Attribut Error: Objekt has not attribute - dies obwohl Code schon gelaufen
Verfasst: Dienstag 5. Januar 2016, 18:47
Hallo Forum,
stehe gerade etwas auf dem Schlauch und benötige Eure Hilfe. Habe in meinem Programm eine Klasse welche ich zweimal aufrufe. In meinem __main__ habe ich eine TRY - Anweisung welche im 10 Sekunden Takt der Klasse diverse Variablen übergibt und dann die dortige Funktion "LuefterSteuern()" aufruft. Im Shell sehe ich daß dies 3 Mal richtig funktioniert. Im vierten Aufruf bekomme ich im Traceback die Info dass ich ein Attribut nicht habe.
hier der Auszug aus dem Shell / Traceback. Ich habe zur besseren Übersicht nach jedem Durchlauf eine Leerzeile eingefügt:
10-000802f8f890: 24.75 °C
10-000802f8e0ef: 24.38 °C
24.75 / 28.0 / 2.0
ich bin im ELIF Zweig
24.375 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 0 / LuefterWR2_EIN: 0
10-000802f8f890: 29.00 °C
10-000802f8e0ef: 24.31 °C
29.0 / 28.0 / 2.0
ich bin im IF Zweig
24.312 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 1 / LuefterWR2_EIN: 0
10-000802f8f890: 30.25 °C
10-000802f8e0ef: 24.31 °C
30.25 / 28.0 / 2.0
ich bin im IF Zweig
24.312 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 1 / LuefterWR2_EIN: 0
10-000802f8f890: 28.75 °C
10-000802f8e0ef: 24.31 °C
28.75 / 28.0 / 2.0
Traceback (most recent call last):
File "/ablage/nfs/pi/WrKuehl.py", line 217, in <module>
LuefterWR1_EIN = LuefterWR1.LuefterSteuern()
File "/ablage/nfs/pi/WrKuehl.py", line 90, in LuefterSteuern
return self.LuefterEin
AttributeError: 'Luefter' object has no attribute 'LuefterEin'
hier der etsprechende Code... Achtung Line 90 stimmt nicht.
Ich hoffe ich habe das verständlich rübergebracht.
stehe gerade etwas auf dem Schlauch und benötige Eure Hilfe. Habe in meinem Programm eine Klasse welche ich zweimal aufrufe. In meinem __main__ habe ich eine TRY - Anweisung welche im 10 Sekunden Takt der Klasse diverse Variablen übergibt und dann die dortige Funktion "LuefterSteuern()" aufruft. Im Shell sehe ich daß dies 3 Mal richtig funktioniert. Im vierten Aufruf bekomme ich im Traceback die Info dass ich ein Attribut nicht habe.
hier der Auszug aus dem Shell / Traceback. Ich habe zur besseren Übersicht nach jedem Durchlauf eine Leerzeile eingefügt:
10-000802f8f890: 24.75 °C
10-000802f8e0ef: 24.38 °C
24.75 / 28.0 / 2.0
ich bin im ELIF Zweig
24.375 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 0 / LuefterWR2_EIN: 0
10-000802f8f890: 29.00 °C
10-000802f8e0ef: 24.31 °C
29.0 / 28.0 / 2.0
ich bin im IF Zweig
24.312 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 1 / LuefterWR2_EIN: 0
10-000802f8f890: 30.25 °C
10-000802f8e0ef: 24.31 °C
30.25 / 28.0 / 2.0
ich bin im IF Zweig
24.312 / 28.0 / 2.0
ich bin im ELIF Zweig
LuefterWR1_EIN: 1 / LuefterWR2_EIN: 0
10-000802f8f890: 28.75 °C
10-000802f8e0ef: 24.31 °C
28.75 / 28.0 / 2.0
Traceback (most recent call last):
File "/ablage/nfs/pi/WrKuehl.py", line 217, in <module>
LuefterWR1_EIN = LuefterWR1.LuefterSteuern()
File "/ablage/nfs/pi/WrKuehl.py", line 90, in LuefterSteuern
return self.LuefterEin
AttributeError: 'Luefter' object has no attribute 'LuefterEin'
hier der etsprechende Code... Achtung Line 90 stimmt nicht.
Code: Alles auswählen
#Klasse Luefter anlegen
class Luefter(object):
def __init__(self, isttemp, solltemp, hysterese):
self.fIsttemp = isttemp
self.fSolltemp = solltemp
self.fHysterese = hysterese
def LuefterSteuern(self):
print(str(self.fIsttemp) + " / " + str(self.fSolltemp) + " / " + str(self.fHysterese))
#Berechnung Schalttemperaturen
self.fTempLuefterEIN = (self.fSolltemp + (self.fHysterese/2))
self.fTempLuefterAUS = (self.fSolltemp - (self.fHysterese/2))
#Vergleich Isttemperatur - Schalttemperaturen
if self.fIsttemp >= self.fTempLuefterEIN:
print("ich bin im IF Zweig")
self.LuefterEin = 1
elif self.fIsttemp <= self.fTempLuefterAUS:
print("ich bin im ELIF Zweig")
self.LuefterEin = 0
#Rükgabe Lüfter EIN/AUS
return self.LuefterEin
...
...
...
if __name__ == "__main__":
#Klasse config Objekt INI-File zuweisen
config = Config(INI_FILE)
#GPIO Zuweisung: Pin 11 --> GPIO17 / Pin 12 --> GPIO18
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
#Verzeichnisstruktur prüfen
CheckAblage()
#Werte aus INI-File ermitteln
fSolltemp = float(config.read_value_ini_file(INI_ITEM_SOLLTEMP))
fHysterese = float(config.read_value_ini_file(INI_ITEM_HYSTERESE))
iAktuallisierung = int(config.read_value_ini_file(INI_ITEM_AKTUALLISIERUNG))
#zyklische Ablaufsteuerung
PrgEnde = PrgEndeUhrzeit()
while PrgEnde == 0:
try:
fIsttempWR1, fIsttempWR2 = TempRead()
LuefterWR1 = Luefter(fIsttempWR1, fSolltemp, fHysterese)
LuefterWR2 = Luefter(fIsttempWR2, fSolltemp, fHysterese)
LuefterWR1_EIN = LuefterWR1.LuefterSteuern()
LuefterWR2_EIN = LuefterWR2.LuefterSteuern()
print("LuefterWR1_EIN: " + str(LuefterWR1_EIN) + " / LuefterWR2_EIN: " + str(LuefterWR2_EIN))
RelaisLuefter1(LuefterWR1_EIN)
RelaisLuefter2(LuefterWR2_EIN)
time.sleep(iAktuallisierung)
PrgEnde = PrgEndeUhrzeit()
except KeyboardInterrupt:
GPIO.cleanup()
sys.exit(0)
#ENDE
GPIO.cleanup()
sys.exit(0)
Ich hoffe ich habe das verständlich rübergebracht.