Seite 1 von 2

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

Verfasst: Mittwoch 7. November 2018, 15:08
von n00b@r00t
durch welches Kommando wird denn die variable als index definiert?

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

Verfasst: Mittwoch 7. November 2018, 15:15
von __deets__
liste[zahl_die_eine_ganzzahl_sein_sollte_aber_es_nicht_ist].

Das Problem ist, dass die betreffende Codestelle so nicht auffindbar ist. Dazu muss man

- die software zum laufen bringen (hast du. wir nicht).
- die stelle finden, an der das logging des fehlers stattfindet, und dieses logging entfernen, und stattdessen den vollen Fehler bekommen.

Dann siehst du, wo genau das passiert.

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

Verfasst: Mittwoch 7. November 2018, 15:55
von n00b@r00t
ok, ich habe hier mal die Schlüsselstellen rausgesucht

Code: Alles auswählen

  def get_price_offset(self, index):
            start_position = self.current_bid_price
            return start_position + index
            
           .....
   
    def prepare_order(self, index):
        """Create an order object."""

        quantity = 100

        price = self.get_price_offset(index)

        return {'price': price, 'orderQty': quantity, 'side': "Buy" if index < 0 else "Sell"}
           
Das ist wohl soweit alles wo dieser Index erwähnt ist, wie kann ich das jetzt abändern, damit ich da Brüche verwenden kann?

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

Verfasst: Mittwoch 7. November 2018, 16:23
von Sirius3
Die Stelle, die Du hier zeigst, hat nirgends eine Einschränkung, ob man da nun Brüche (Dezimal) oder Fließkommazahlen verwendet. Wie schon geschrieben, Du mußt die Stelle des Fehlers finden, und von dort aus Rückwärts suchen, wo ein "falscher" Wert eingesteuert wird.

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

Verfasst: Mittwoch 7. November 2018, 16:46
von n00b@r00t
Aber wird hier nicht die Zahl an Index definiert??? def get_price_offset(self, index):

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

Verfasst: Mittwoch 7. November 2018, 17:04
von __blackjack__
@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.

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

Verfasst: Mittwoch 7. November 2018, 17:14
von n00b@r00t
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

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

Verfasst: Mittwoch 7. November 2018, 17:23
von Sirius3
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.

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

Verfasst: Mittwoch 7. November 2018, 17:25
von __deets__
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.

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

Verfasst: Mittwoch 7. November 2018, 17:26
von __blackjack__
@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?