KeyError bei Übergabe über Klassenmethode
Verfasst: Mittwoch 23. Dezember 2020, 11:28
Hallo liebe Community,
für die Arbeit an einem Prüfstand schreibe ich ein kleines Programm, das mir beim Auswerten der Messunsicherheit helfen soll. Dabei bin ich unter anderem mit Hilfe des Forums auf die uncertainties Bibliothek und die Methode derivatives gestoßen. Diese möchte ich nutzen und habe dazu bereits folgenden Code geschrieben(vereinfachter Abschnitt):
Ohne die auskommentierten Zeilen funktioniert der Code so wie ich es will, ich möchte jedoch in jedem Fall die Klasse "Messebene" verwenden und somit auf die Methode ufloat_value zurückgreifen. Dieses Vorgehen entspricht den auskommentierten Zeilen.
Auf gar keinen Fall möchte ich die Variablen händisch definieren (so wie a und b). Die Initialisierung geschieht eigentlich über ein dictionary, aus Platzgründen habe ich representativ drei Instanzen dargestellt.
Nun meine Frage: Beim Benutzten der Methode ufloat_value gibt mir das Programm ständig einen KeyError, in der Zeile "ableitung_partiell=..." zurück, den ich nicht nachvollziehen kann.
Sowohl die Methode ufloat_value als auch a/b geben einen einen ufloat Wert der Klasse uncertainties.core.Variable zurück. Laut Debugger sind mMn die übergebenen Daten komplett gleich, gleicher Datentyp, gleiches "Aussehen, usw.". Ich kann mir jedoch diesen KeyError nicht erklären und somit meine gewünschte Methode nicht nutzen.
Könnt ihr mir auf die Sprünge helfen, wie ich diese Methode nutzen kann, damit das Problem so läuft, als hätte ich die Variablen händisch definiert?
Was müsste ich anders definieren? Was habe ich falsch gemacht?
Vielen Dank im Voraus
für die Arbeit an einem Prüfstand schreibe ich ein kleines Programm, das mir beim Auswerten der Messunsicherheit helfen soll. Dabei bin ich unter anderem mit Hilfe des Forums auf die uncertainties Bibliothek und die Methode derivatives gestoßen. Diese möchte ich nutzen und habe dazu bereits folgenden Code geschrieben(vereinfachter Abschnitt):
Code: Alles auswählen
from uncertainties import ufloat
import numpy as np
def calc_uncertainty_systematic_sensor(sensor):
uncertainty_systematic_sensor=float()
if sensor == 'Rosemount_1151_AP5':
uncertainty_systematic_sensor = 10
elif sensor == 'Rosemount_1151_DP4':
uncertainty_systematic_sensor = 20
else:
uncertainty_systematic_sensor = 0.75
return uncertainty_systematic_sensor
class Messebene:
def __init__(self, value, sensortype):
self.value=value
self.sensortype=sensortype
def ufloat_value(self):
mean_value=np.mean(self.value)
uncertainty_systematic_value = calc_uncertainty_systematic_sensor(self.sensortype)
ufloat_value_=ufloat(mean_value,uncertainty_systematic_value)
return ufloat_value_
P01=Messebene([120000, 120010, 120015, 120008], 'Rosemount_1151_AP5')
P02=Messebene([12000, 12010, 12015, 12005], 'Rosemount_1151_DP4')
T01=Messebene([300, 301, 300.75, 300.25], 'RTD')
a=ufloat(150, 10)
b=ufloat(325, 20)
#funktionsgleichung=P01.ufloat_value()/(P02.ufloat_value()-T01.ufloat_value())
#ableitung_partiell=funktionsgleichung.derivatives[P01.ufloat_value()]'''
funktionsgleichung2=a*b
ableitung_partiell_2=funktionsgleichung2.derivatives[a]
Auf gar keinen Fall möchte ich die Variablen händisch definieren (so wie a und b). Die Initialisierung geschieht eigentlich über ein dictionary, aus Platzgründen habe ich representativ drei Instanzen dargestellt.
Nun meine Frage: Beim Benutzten der Methode ufloat_value gibt mir das Programm ständig einen KeyError, in der Zeile "ableitung_partiell=..." zurück, den ich nicht nachvollziehen kann.
Sowohl die Methode ufloat_value als auch a/b geben einen einen ufloat Wert der Klasse uncertainties.core.Variable zurück. Laut Debugger sind mMn die übergebenen Daten komplett gleich, gleicher Datentyp, gleiches "Aussehen, usw.". Ich kann mir jedoch diesen KeyError nicht erklären und somit meine gewünschte Methode nicht nutzen.
Könnt ihr mir auf die Sprünge helfen, wie ich diese Methode nutzen kann, damit das Problem so läuft, als hätte ich die Variablen händisch definiert?
Was müsste ich anders definieren? Was habe ich falsch gemacht?
Vielen Dank im Voraus