.format()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Jemand eine Idee, wonach ich bei diesem Fehler suchen muss:

Code: Alles auswählen

TypeError: non-empty format string passed to object.__format__
Also ich übergebe eine Liste von Integern und Gleitkommazahlen an einen sehr langen HTML-String mit {}-Platzhalter für die Integer-Werte und {:.2f}-Platzhalter dort, wo ich Nachkommastellen möchte.

Mein Sachstand:
- Die Länge der Werte entspricht der Anzahl der Platzhalter, d. h. diese Fehlerquelle schließe ich aus.
- TypeError? Ich verstehe es so, dass mein String mit den Platzhaltern den Fehler verursacht!?
- Wie kann ich aus der Fehlermeldung auf den Fehler schließen?
BlackJack

@pixewakb: Da wird `object.__format__()` aufgerufen und nicht `int.__format__()` oder `float.__format__()`. Das sieht also danach aus als wenn mindestens einer der Werte nicht den Typen entspricht die Du da erwartest.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ich werde es mir morgen noch mal ansehen. Danke für den Hinweis, darauf wäre ich nicht gekommen.

Code: Alles auswählen

print(len(werte))
print(html.count("{}"))
print(html.format(werte))
Liefert bei mir in der Konsole:

Code: Alles auswählen

11
11
Traceback (most recent call last):
[...]
IndexError: tuple index out of range
Es gibt Sachen, die erschließen sich mir nicht mehr. Bei tuple index out of range würde ich jetzt überlegen die Felder zu nummerieren, also {0} usw.? Warum kann ich einen IndexError bekommen, wenn die Werteliste (len) und die Felder (len) genau passen!?

Ich würde in einem zweiten Schritt schauen wollen, wo der Typ falsch ist. Das erschließt sich mir gerade nicht.
BlackJack

@pixewakb: `werte` ist genau *ein* Wert auch wenn der eine Liste mit 11 Elementen ist, Du hast aber 11 Platzhalter. `format()` erwartet 11 Argumente wenn 11 Platzhalter in der Zeichenkette sind. Der erste Platzhalter ist für die Liste und beim zweiten Platzhalter gibt's dann den `IndexError` im Argumententupel.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Danke, ich konnte es damit jetzt lösen und verbauen!!!
Antworten