Wie kann ich den Fehler bei Python beheben?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
text = " ".join(tokens)

... hier wird erwartet, dass tokens eine Liste oder ein anderer Objekttyp ist über den man iterieren kann.

Vereinfacht gesagt versuchst du mehrere Werte mit Leerzeichen zu verbinden, tokens beinhaltet aber keinen Wert oder nur einen Wert in einem falschen Datentyp.

Das wäre ein typischer Fall in den des hilfreich ist das Programm zu debuggen und Zeile für Zeile abzuarbeiten um zu sehen was genau da passiert und wie und wo tokens gebildet und verändert wird bzw. was am Ende darin steht.

Guckst du: https://www.youtube.com/watch?v=sRGpvbhOhQs

Woher ich das weiß:Berufserfahrung – Pentester & Sachverständiger für IT Sicherheit
MisterBlaa 
Fragesteller
 10.03.2023, 22:32

Gibts da eine Möglichkeit das möglichst schnell zu kontrollieren?

Danke für deine Antwort 🤩

0
Mark Berger  10.03.2023, 23:02
@MisterBlaa
Gibts da eine Möglichkeit das möglichst schnell zu kontrollieren?

Ja die nennt sich auskennen und effizient mit den Tools arbeiten.

0
Mark Berger  10.03.2023, 23:05
@MisterBlaa
Kann ich den Code mit dir irgendwie teilen?

Ja klar, GitHub zum Beispiel. Aber ich hab keine Lust und Zeit deine Arbeit zu machen. Daher kannst du meine Tipps annehmen und selber lernen wie du sowas hinbekommst oder alternativ verlange ich 125 EUR / Stunde - wenn dir das recht ist dann kannst mich auch anheuern ;-)

PS.: Inder von Fiver wären billiger wenn du jemanden willst der deine Arbeit macht...

0
Mark Berger  10.03.2023, 23:31
@MisterBlaa

Ich verstehe schon, dass es stressig ist - das ist aber einer der Fehler bei dem ich keine Ahnung habe ob ich den in 10 Minuten finde oder ob ich 10 Stunden herumsuche um zu verstehen was in einem Modul im argen liegt, dann den Entwickler des Moduls den Fehler melde und als provisorische Lösung dann noch einen Workaround zusammenbasteln muss.

Du hast 3 Fehlerarten:

Bei Syntaxfehlern sagt dir der Interpreter beim Start, dass der Code in Zeile XY nicht korret ist.

Bei Laufzeitfehlern ist alles korrekt aber an einem bestimmten Punkt stürzt dein Programm ab. Das kann an etwas liegen das du nicht bedacht hast oder zB an etwas, dass der User falsch eingibt. Manchmal tritt so ein Fehler auch nur auf, wenn bestimmte Dinge im Programm passieren.

Das kann offensichtlich sein wie eine Division durch Null die du nicht bedacht hast oder auch sehr komplex wenn eine bestimmte Konstellation Daten liefert, die dann nicht verarbeitet werden können. Ich hatte das zB gestern beim Einlesen von zig tausend Dateien nach 2h Programmlaufzeit stürzt das Script ab. Grund war eine bestimmte Zeile in einer bestimmten Datei in der ungültige Daten waren.

Die schlimmste Fehlerart sind logische Fehler. Hierbei läuft das Programm ganz normal, liefert aber nicht die Ergebnisse die es liefern soll.

Du hast wahrscheinlich einen logischen Fehler der falsche Daten produziert, die dann zu einem Laufzeitfehler führen.

Oder anders gesagt - dein Fehler liegt ganz wo anders als in der Zeile in der das Script abstürzt.

Daher kann so etwas nur gefunden werden wenn man sich genau ansieht was das Programm macht und dann genau prüft wie sich welche Variable verändert, etc.

1
MisterBlaa 
Fragesteller
 10.03.2023, 23:42
@Mark Berger

Herzlichen Dank für deine ausführliche Nachricht!

Ich glaube die Zeit reicht jetzt wahrscheinlich leider nicht mehr aus.

Das ist wahrscheinlich wirklich der Fehler, sind aber auch die meisten die ich immer hab. Das ich einfach irgendwas überseh und dann nicht drauf komm. Deine Ratschläge haben mir für die Zukunft schon mal ein bisschen geholfen!

0
Von Experte ralphdieter bestätigt

Es wird ein iterable erwartet, während Du etwas anderes übergibst. Du zeigst nirgends, was

LanguageModel.generate

ist, dem Namen nach könnte es sich um ein Funktionsobjekt handeln.

ralphdieter  11.03.2023, 13:38

... und in diesem Fall hat man meist nur die Klammern für den Aufruf vergessen:

  detokenize(LanguageModel.generate())

Bei jemandem, der seinen Quelltext vom Bildschirm abfotografiert und dabei auch noch den Blitz einschaltet, muss man das wahrscheinlich dazu sagen ;-)

1

Dein Wert den du zurück bekommst scheint leer zu sein. Das geht an der Stelle natürlich nicht. Die Frage ist warum der Wert leer ist.

Es ist ziemlich schwer, da den Fehler mit so ein paar Codesnippets zu sehen und zu lösen.

Woher ich das weiß:Studium / Ausbildung
MisterBlaa 
Fragesteller
 10.03.2023, 22:21

Was genau bräuchtest du denn um eine bessere Antwort geben zu können? :)

0
verreisterNutzer  10.03.2023, 22:22
@MisterBlaa

Zeit und zumindest die Klassen die du nutzt.
Einfacher ist es vermutlich mal ChatGPT zu fragen, klingt zwar dumm aber das Teil kann echt eine gute Hilfe sein. Auch wenn der Code nicht imemr ganz passt und es machmal paar Anläufe braucht

1
Mark Berger  10.03.2023, 22:28
@MisterBlaa

Wenn du programmieren willst, wirst du lernen müssen Google und einen Debugger zu nutzen. Denn das ist ein sehr großer Teil der Arbeit eines Entwicklers.

0
MisterBlaa 
Fragesteller
 10.03.2023, 22:30
@verreisterNutzer

Was genau müsstest du sehen? Ich kann hier ja bestimmt auch nicht so viele Bilder einfügen.

danke auf jeden Fall für die Hilfe! 🤩

0
MisterBlaa 
Fragesteller
 10.03.2023, 22:35
@Mark Berger

Es ist halt so dass ich in einem anderen file die Tokens mit nltk erstellt hab und in nem anderen file das Language Model als Klasse erstellt hab mit den Funktionen train,, get_ngrams, generate, normalize und so. Dort funktioniert das auch, dass ich mir die n-grams ausgeben lassen kann. In main.py hab ich dann alles importiert, aber erst da heißt es dann dass der Fehler in der corpus Datei liegt bei der Funktion detokenize

0
Mark Berger  10.03.2023, 22:58
@MisterBlaa
Was genau müsstest du sehen? Ich kann hier ja bestimmt auch nicht so viele Bilder einfügen.

Ich brauche keine Bilder - Bilder sagen mir nicht was das Programm genau macht - ich brauche den Code mit allen Programmdateien und dann kann ich den Zeile für Zeile durchlaufen lassen. Genau das macht man beim debuggen bzw. meist konzentriert man sich auf bestimmte Bereiche die man testen will.

1
Mark Berger  10.03.2023, 23:01
@MisterBlaa
Es ist halt so dass ... liegt bei der Funktion detokenize

Das ist schön - sagt mir aber alles rein gar nichts da ich weder den Code noch die Module kenne mit denen du herumspielst.

So kann niemand einen Fehler finden der nicht genau das gleiche gemacht hat wie du und daher das ganze Problem eventuell schon kennt!

Schau dir das Video in meiner Antwort an, lerne mit einem Debugger umzugehen und du kannst gleich mal einen viel größeren Teil von Fehlern selber finden!

1
verreisterNutzer  10.03.2023, 23:09
@Mark Berger

Ich schließe mich da einfach mal an, es ist schwer so mir nichts dir nichts den Fehler zu finden. Wenn man den Code sieht, kann man es herleiten.
Aber z.B. zu sehen, dass der Wert leer ist habe ich nur an der Fehlermeldung. Ein Debugger ist das tollste Werkzeug und durch dieses Fehlersuchen lernst du richtiges Entwickeln.

1
MisterBlaa 
Fragesteller
 10.03.2023, 23:15
@verreisterNutzer

Es ist leider nur die kürze der Zeit.. seit 2 Tagen versuche ich selbst auf den Fehler zu kommen und finde es einfach nicht.
Es ist dennoch lieb, wie ihr mir helfen wolltet‘!

0
Mark Berger  10.03.2023, 23:17
@verreisterNutzer

Genau. Ich hatte einen sehr tollen EDV Lehrer in der Hauptschule. Wir hatten damals Basic gelernt und gleich schon bei den Verzweigungen und Schleifen die Programme mit dem Debugger ausgeführt. So hatten wir nicht nur gesehen was da passiert sondern auch gleich gelernt wie wichtig dieses Tool ist um das Verhalten und die Fehler in einem Programm zu verstehen...

0