Python key error?

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
Backware
User
Beiträge: 4
Registriert: Samstag 15. August 2020, 14:52

Kann mir mal wer sagen wie ich das problem löse da ich in internet einfach keine lösungen finde.
python version: 3.6.5

Mein code um ein json data bank zu erstellen die für ein bot gedacht ist die funktion wird dann importiert was ja eigentlich kein problem ist.

Code: Alles auswählen

import json

filename = "database/bank.json"

def konto(id):
    with open(filename, "r") as f:
        users = json.load(f)

    if str(id) in users:
        return False
    else:
        users[str(id)]["bank"] = 0
        users[str(id)]["wallet"] = 0
 
    with open(filename, "w") as f:
        json.dump(users, f)

konto(302428535883038721)

Code: Alles auswählen

Traceback (most recent call last):
  File "main.py", line 5, in <module>
    import functions.bank as bank
  File "C:\Users\Backware\Desktop\Economy\functions\bank.py", line 18, in <module>
    konto(302428535883038721)
  File "C:\Users\Backware\Desktop\Economy\functions\bank.py", line 12, in konto
    users[str(id)]["bank"] = 0
KeyError: '302428535883038721'
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du pruefst doch, ob str(id) in deiner "Datenbank" ist. Ist es nicht. Und dann tust du so, als ob es doch drin waere: users[str(id)]["bank"] versucht auf einen Eintrag zuzugreifen. Und da ist halt keiner.

Was du wahrscheinlich suchst ist

Code: Alles auswählen

users[id_] = dict(bank=0, wallet=0)
Die Fehlerbehandlung mit Return-code ist schlecht und selbst ein Fehler, denn jetzt gibst du implizit None zurueck, was nahezu ununterscheidbar von False ist. Und andauernd str(id) aufzurufen, statt einmal vernuenftig die Erwartung, dass das ein String ist, zu codieren, durch zb ein

id_ = str(id_)

ganz am Anfang, ist auch ungeschickt.

Und zu guter Letzt wird dir dein relativer Pfad der Datebank um die Ohren fliegen, das funktioniert nicht so, wie du denkst, dass es funktioniert. Das muss ein absoluter Pfad sein, oder du musst es zu einem machen, unter Zuhilfenahme von __file__ und pathlib.
Antworten