Zum Inhalt

Beispielarbeiten · Code & Fehler

Code-Reparatur: Ein CSV-Import, der Beträge falsch liest

Ein Python-Skript las „1.234,50“ aus einem deutschen Kassenexport als 1,2345. Hier stehen Ursache, Reparatur und der Test, der den Fehler künftig festhält.

Beispielarbeit, kein Kundenauftrag. Der Betrieb und alle Zahlen sind erfunden, damit du siehst, wie die Arbeit aussieht, bevor du etwas in Auftrag gibst.

Das Symptom

Die Monatssumme aus dem Kassenexport war viel zu klein. Einzelne Zeilen fehlten ganz: das Skript brach bei Beträgen über 999 Euro ab oder las sie als Kommazahl.

Die Ursache

Der Export schreibt Beträge im deutschen Format, mit Punkt als Tausender- und Komma als Dezimaltrenner. Das Skript ersetzte nur das Komma durch einen Punkt. Aus „1.234,50“ wurde „1.234.50“, und das ist keine Zahl.

Vorher

def betrag(text):
    return float(text.replace(",", "."))      # "1.234,50" -> "1.234.50" -> Fehler oder falscher Wert

Nachher

def betrag(text: str) -> float:
    """Deutsches Format aus dem Kassenexport: Punkt = Tausender, Komma = Dezimal."""
    roh = text.strip().replace("\u00a0", "").replace(" €", "")
    if "," in roh:
        roh = roh.replace(".", "").replace(",", ".")
    return round(float(roh), 2)

Der Test, der den Fehler festhält

def test_deutsche_betraege():
    assert betrag("1.234,50") == 1234.50
    assert betrag("0,99") == 0.99
    assert betrag("12,00 €") == 12.00
    assert betrag("250") == 250.00

Geliefert wird beides: die Reparatur und der Test. Kommt der Fehler durch eine spätere Änderung zurück, schlägt der Test an, bevor falsche Zahlen in der Buchhaltung landen.

So etwas für deinen Betrieb?

Beschreib kurz, was du brauchst. Du bekommst einen Festpreis, bevor ich anfange; ohne dein Ja passiert nichts.

Zur Werkstatt