ich habe hier eine Funktion zeitspanne_ermitteln(...) sie nimmt Parameter entgegen und soll mir ermitteln wie viel Tage oder Monate VON BIS sind.
Code: Alles auswählen
def zeitspanne_ermitteln(
self,
vonJJJJ: int,
vonM: int,
vonT: int,
bisJJJJ: int,
bisM: int,
bisT: int,
einheit: str,
):
if bisJJJJ == 0 and bisM == 0 and bisT == 0:
zeitspanne = datetime.now() - datetime(vonJJJJ, vonM, vonT)
else:
zeitspanne = datetime(bisJJJJ, bisM, bisT) - datetime(vonJJJJ, vonM, vonT)
zeitspanne = zeitspanne.total_seconds()
if einheit == "Tage":
tage = zeitspanne / 86400
return tage
elif einheit == "Monate":
monate = math.floor(zeitspanne / 2419200) + 1
return monate
die Erste funktioniert wunderbar die Zweite irgendwie nicht. Obwohl sie fast identisch sind?
Als Fehlermeldung bekomme ich:
Code: Alles auswählen
/usr/bin/python3.12 /home/masterblack/PycharmProjects/Verbrauchsrechner/verbrauchsrechner.py
Traceback (most recent call last):
File "/home/masterblack/PycharmProjects/Verbrauchsrechner/verbrauchsrechner.py", line 43, in berechne
f"{abrechnung.bisheriger_gezahlter_abschlag:.2f} €"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/masterblack/PycharmProjects/Verbrauchsrechner/berechnungen/abrechnung.py", line 80, in bisheriger_gezahlter_abschlag
betrag = monate * self.tarif.monatlicher_abschlag
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'
Code: Alles auswählen
@property
def grundpreis_tagesgenau_netto(self) -> float:
"""
Ermittlung des Grundpreises bis zum heutigen Tag netto
Returns
-------
float
"""
betrag_tag = self.nettobetrag_berechnen(self.tarif.grundpreis) * 12 / 365
tage = self.zeitspanne_ermitteln(2024, 6, 13, 0, 0, 0, "Tage")
betrag = round(betrag_tag * tage, 3)
return betrag
@property
def bisheriger_gezahlter_abschlag(self):
monate = self.zeitspanne_ermitteln(2024, 6, 1, 0, 0, 0, "Monat")
betrag = monate * self.tarif.monatlicher_abschlag
return betrag