Brauche Hilfe bei einem Code

Code-Stücke können hier veröffentlicht werden.
Antworten
LiiNKSYS
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2022, 17:38

Hallo,

Kann mir bitte jemand sagen wo mein Fehler in der Python Datei ist. Die Datei wird ausgeführt und beendet ohne Fehlercode. Sie macht aber einfach gar nichts! Vielleicht schaut von euch jemand rein und sieht sofort den Fehler und kann mich korrigieren! Vielen Dank im Voraus!
Die Einrückungen stimmen in PyCharme. Wusste leider nicht wie ich den Code hier einfügen kann und habe Copy/paste betrieben :D

Pythoncode:
import json


eingabefeld = "000000000"


def find_index(eingabefeld, python_liste):
with open("Inventar.json", 'r') as f:
python_liste = json.load(f)
print(python_liste)

index = -1

for i, item in enumerate(python_liste):
if item["Key"] == eingabefeld:
index = i
ergebnis = index
print(ergebnis)


return index


Inventar.json :

{
"Teilenummer": "000000000",
"Lagerort": "M000",
"Beschreibung": "Schraubendreher",
"Bestand": 3
}
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Bitte poste deinen Code in Code-Tags. Ansonsten bleiben die Einrückungen nicht erhalten.
Die Code-Tags werden eingefügt, wenn du den </> Button im "vollständigen Editor" drückst.

Zu deinem Code:
Du defnierst eine Funktion, fürst aber nichts aus.
LiiNKSYS
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2022, 17:38

Ich danke dir!
LiiNKSYS
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2022, 17:38

Komisch finde ich nur, dass auch das "print(Python_liste)" nicht in der Console ausgegeben wird. Kannst du mir sagen wieso?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Aus dem gleichen Grund?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo ist das Hauptprogramm? Die Datei definiert nur eine Funktion, die wird aber nie aufgerufen.

`python_liste` wird als Argument übergeben, aber sofort mit dem Inhalt der json-Datei überschrieben, das Argument also unsinnig.
Ein Wörterbuch `python_liste` zu nennen, ist sehr verwirrend, weil es keine Liste ist und der Inhalt auch nichts mit python zu tun hat. Oder sind Deine Beispieldaten falsch? Denn der weiter Code läßt vermuten, dass in der json-Datei doch eine Liste steht. Aber auch dann ist `_liste` in einem Variablenname schlecht, `teile` wäre ein besserer Name.
Textdateien öffnet man immer mit einem Encoding, hier utf8.
`index`, `i` und `ergebnis` haben alle den selben Wert. Zwei davon sind also unnötig.
-1 bei nicht gefunden ist ein schlechter Wert. Besser wäre es, eine Exception zu werfen.
"Key" ist nicht Bestandteil des Wörterbuchs.

Code: Alles auswählen

def find_index(teilenummer):
    with open("Inventar.json", 'r', encoding="utf8") as f:
        teile = json.load(f)

    for index, teil in enumerate(teile):
        if teil["Teilenummer"] == teilenummer:
            return index
    raise ValueError(f"{teilenummer} not found")
Je nachdem, wie oft `find_index` aufgerufen werden soll, ist es schlecht, dass da immer wieder die selbe Datei gelesen wird. Ist der Index überhaupt ein sinnvoller Rückgabewert? Wie wird diese Funktion benutzt?
LiiNKSYS
User
Beiträge: 11
Registriert: Freitag 30. Dezember 2022, 17:38

Das ist nur ein "Test" Code. Ich habe einen Code für unser Lager geschrieben, der nach einer Teilenummer in einer Liste suchen soll und daraufhin den Lagerort usw. ausgeben soll. Die Daten wie "Bestand" müssen im Nachhinein bearbeitet werden und ich wollte sie deshalb in einer JSON Datei packen. Den Code oben habe ich nur geschrieben, um zu testen, ob das ganze funktioniert und wie es funktioniert. Ich habe zuvor noch nie mit JSON gearbeitet. Aus irgendeinem Grund fällt es mir aber sehr schwer.

Code: Alles auswählen

import json

eingabefeld = "000000000"


def find_index(eingabefeld, python_liste):
    with open("Inventar.json", 'r') as f:
        python_liste = json.load(f)
        print(python_liste)

    index = -1

    for i, item in enumerate(python_liste):
        if item["Key"] == eingabefeld:
            index = find_index(eingabefeld, python_liste)
            if index != -1:
                item = python_liste[index]
                print(item["Key"])
                print(item["Value"])

    return index
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Auch Beispielcode sollte korrekt sein. Und wenn "Key" eigentlich "Teilenummer" sein sollte, dann versteht hier niemand, ob Du da etwas falsch verstanden hast, oder ob das nur dem "Beispiel" geschuldet ist.
Mit Deinem neuen Code kann ich nichts anfangen, weil der kommentarlos an Deine letzte Nachricht angehängt worden ist, und noch weniger Sinn macht, als Dein erster Code. Und es läßt nicht erkennen, ob Du irgendetwas von meiner Antwort verstanden hast.
Geh also nochmal ein paar Schritte zurück und erkläre erst einmal, was für ein Problem Du lösen möchtest und welche Schritte Du zur Lösung versucht hast.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

> Ich habe zuvor noch nie mit JSON gearbeitet. Aus irgendeinem Grund fällt es mir aber sehr schwer.

Dann mal weg von JSON. Mach das Problem kleiner und einfacher. Löse erstmal das einfache Problem. Wie kannst du ein Programm schreiben, das eine Liste ausgibt? Die Liste muss nicht aus einer JSON Datei kommen, sondern die kannst du einfach im Programm selbst mit 2-3 "Test" Werten vorbelegen. Es geht nur darum zu testen, ob die Ausgabe funktioniert und wie sie funktioniert.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten