"list indices must be integers or slices not float" Ursache lokalisieren
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.
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.
ok, ich habe hier mal die Schlüsselstellen rausgesucht
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?
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"}
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.
- __blackjack__
- User
- Beiträge: 13079
- 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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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:
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
An der Stelle wurde ja nur auf komplizierte Weise ein
geschrieben. Das hat ja noch nichts damit zu tun, was in der Liste `buy_orders` drinsteht. Eine halbe Kaufoption kann man halt nicht absetzen.
Code: Alles auswählen
to_create.extend(buy_orders)
self.postedOrders.extend(buy_orders)
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.
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.
- __blackjack__
- User
- Beiträge: 13079
- 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?
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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman