"list indices must be integers or slices not float" Ursache lokalisieren

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14029
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n00b@r00t: Das die Variable hier `index` heisst ist nicht das Problem. Du musst die Stelle finden wo der Wert als Index *verwendet* wird, wobei an der Stelle die Variablen auch anders heissen kann. Der Name ist für Dich als Leser ein Hinweis, dem Rechner ist es egal wie Indexvariablen heissen. Der schaut halt nur bei einem Indexzugriff bei einer Liste ob es sich beim Wert um eine ganze Zahl, ein `slice`-Objekt, oder ein Wert von einem Typ handelt der `__index__()` implementiert hat.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

Leider habe ich keine Ahnung wie ich identifizieren soll soll wo ein Index verwendet wird und wo nicht...

also der Ursprung des Fehlers liegt sicher hier, weil wenn ich eine ganze Zahl verwende läuft es:

Code: Alles auswählen

        while buys_matched < len(buy_orders):
            to_create.append(buy_orders[buys_matched])
            self.postedOrders.append(buy_orders[buys_matched])
            buys_matched += 0.5
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

An der Stelle wurde ja nur auf komplizierte Weise ein

Code: Alles auswählen

to_create.extend(buy_orders)
self.postedOrders.extend(buy_orders)
geschrieben. Das hat ja noch nichts damit zu tun, was in der Liste `buy_orders` drinsteht. Eine halbe Kaufoption kann man halt nicht absetzen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

buy_orders ist eine Liste. Und buys_matched ist eine Laufvariable, welche die einzelnen Indizes annimmt, mit dem man auf die Liste zugreifen kann. Wie bist du denn auf die Idee gekommen, dass du *DA* einfach irgendwo 0.5 draufaddieren kannst? Wenn ich drei Aepfel vor dir hinstelle und sage, "gib mir den ersten", dann weisst du was du tun musst. Wenn ich dir sage "gib mir den 1.5ten", dann guckst du mich bloed an. Das macht Python auch.

So leid es mir tut, du wirst nicht darum herumkommen, zu VERSTEHEN, wie Python funktioniert, und wie dein Bot funktioniert. Nur dann kannst du da geziehlt eine Aenderung herbeifuehren. Oder bohrst du auch einfach mit ner Bohrmaschine ein Loch irgendwo in deinen Motorblock, um dein Auto zu tunen? Da knirscht und knallt es dann auch.
Benutzeravatar
__blackjack__
User
Beiträge: 14029
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n00b@r00t: Wo `buys_matched` als Index verwendet wird ist eigentlich sehr offensichtlich, und warum das mit einem Dezimalbruch nicht klappt, sollte eigentlich auch sonnenklar sein wenn man Python kann. Also nicht Python-Profi ist, sondern einfach mal ein Grundlagentutorial durchgearbeitet hat. Zum Beispiel das in der Python-Dokumentation.

Bei dem Code-Beispiel müsstest Du dann auch mal erklären was bei einem Dezimalbruch passieren soll anstelle einer Ausnahme. Das erscheint mir nämlich nicht sinnvoll. Und die Schleife sieht auch komisch aus. Wenn da statt 0.5 original 1 steht, dann ist das kein idiomatisches Python, denn dann würde man das ohne Indexwert mit einer ``for``-Schleife schreiben. Wie wird `buys_matched` denn initialisiert?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten