"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.
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

Ich bekomme in einem Skript diesen Fehler ausgeworfen, ich habe aber jeder nicht natürlichen Zahl "float" zugeordnet. Wie kann ich mir anzeigen lassen in welchem file/in welcher Zeile das Problem produziert wird.

Sorry aber bin wirklich ein noob! :D
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da du uns Code und konkrete Fehlermeldung vorenthaelst, kann man nur sagen "in der Zeile, die in der Fehlermeldung ganz deutlich angegeben ist".
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n00b@r00t: Du bekommst ja nicht nur diese eine Zeile sondern einen Traceback. An dem kannst Du die Stelle finden wo das Problem in Deinem Code seinen Ursprung hat.

Was bedeutet „ich habe aber jeder nicht natürlichen Zahl "float" zugeordnet“?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

__blackjack__ hat geschrieben: Dienstag 6. November 2018, 12:08 @n00b@r00t: Du bekommst ja nicht nur diese eine Zeile sondern einen Traceback. An dem kannst Du die Stelle finden wo das Problem in Deinem Code seinen Ursprung hat.

Was bedeutet „ich habe aber jeder nicht natürlichen Zahl "float" zugeordnet“?
Das ist die ganze Fehlermeldung die ich bekomme:
Bild

Und das meine ich damit:
Bild

Ich bekomme leider nirgendwo angezeigt wo der Fehler genau liegt (offensichtlich in der bitmex_bot, aber wo genau...)
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist augenscheinlich nicht dein Code, sondern etwas, das du irgendwoher hast. Und da faengt einer die Fehlermeldung ab, und gibt nur wenig hilfreiche Teile aus. Die Stelle im Code musst du finden, und dort einfach die Fehlerbehandlung veraendern. Wer schreibt denn den Bitmex-Bot? Frag den doch?
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n00b@r00t: Du hast also die ganze Zahl 0 und machst daraus in voller Absicht mit `float()` eine Gleitkommazahl. Warum machst Du das wenn Du doch weisst das man die dann nicht als Index in eine Liste verwenden kann? Das macht keinen Sinn. Genau wie das addieren einer 0 nicht wirklich Sinn macht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

__blackjack__ hat geschrieben: Dienstag 6. November 2018, 12:54 @n00b@r00t: Du hast also die ganze Zahl 0 und machst daraus in voller Absicht mit `float()` eine Gleitkommazahl. Warum machst Du das wenn Du doch weisst das man die dann nicht als Index in eine Liste verwenden kann? Das macht keinen Sinn. Genau wie das addieren einer 0 nicht wirklich Sinn macht.
Weil ich ein Noob bin :)

Was muss ich also tun? Ich brauche diese Bruchzahlen.

Ja der Code ist nicht von mir und ziemlich lang.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@n00b@r00t: ohne zu wissen, was Du eigentlich machen willst, kann man schlecht Code, den man nicht kennt, korrigieren. Ohne dass Du anfängst Python zu lernen, werden Dir die Hilfestellungen, die wir Dir geben können, aber auch nicht weit bringen.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n00b@r00t: Du hast da keine Bruchzahl sondern einfach eine 0 bzw. durch das `float()` eine 0.0. Und wenn Du einen Dezimalbruch hättest, kannst Du sie nicht als Index in eine Liste verwenden. Wie sollte das denn überhaupt gehen mit einem Dezimalbruch als Index? Was sollte das denn Deiner Meinung nach bedeuten?

Arbeite am besten erst einmal das Tutorial in der Python-Dokumentation durch. Und dann beschreib mal Dein Problem, und nicht die Probleme die Du bei dem Code hast, von dem Du glaubst es wäre eine Lösung für Dein Problem. Bitte nicht als Bilder, sondern als Quelltext. Auch Textfehlermeldungen sind besser als Text zu lesen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

Es geht hier darum Orders per Api an eine Börse zu senden. Offenbar ist hier nur vorgesehen auf ganzen Beträgen zu handeln (100, 101, 102...) ich möchte aber auch auf den Centbeträgen handeln (100, 100.05, 100.10...).
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Geht halt nicht. Musst du umprogrammieren, wenn du das machen willst.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Warum wird ein Betrag als Index in eine Liste verwendet?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

__blackjack__ hat geschrieben: Dienstag 6. November 2018, 16:13 Warum wird ein Betrag als Index in eine Liste verwendet?
das weiss ich nicht, sinn des skripts ist es mehrere Orders mit verschiedenen Preisen zu generieren (aktueller Preis +1, +2, +3...) ich möchte aber +0.5, +1, +1,5...
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann stell einen Issue in dem dazugehoerigen github-Repository ein. Dann kann der Autor dir das als Feature bauen. Kannst ihm ja Bitcoin dafuer versprechen. Es ist durchaus einiges an Arbeit, sich mit diesem Code auseinander zu setzen, und ihm neue Tricks beizubringen. Da musst du halt Python fuer koennen.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@n00b@r00t: Wenn Du das nicht weisst, solltest Du das vielleicht herausfinden. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

durch welches Kommando wird denn die variable als index definiert?
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

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?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
n00b@r00t
User
Beiträge: 10
Registriert: Dienstag 6. November 2018, 11:33

Aber wird hier nicht die Zahl an Index definiert??? def get_price_offset(self, index):
Antworten