__repr__ returned non-string (type int)

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
universum2000
User
Beiträge: 3
Registriert: Sonntag 22. Dezember 2013, 17:54

Hallo,

ich komme an dieser Stelle leider nicht mehr alleine weiter, vielleicht sieht jemand den Fehler, den ich nicht sehe.
Es geht um ein Sudoku, versuche eine Hinweisfunktion zu basteln, aber es klappt nicht.

Der Mapper wandelt nur von string in int um, für die internen Listen.
get_empty() prüft ob Eintrag leer ist.

Im wesentlich möchte ich für den Eintrag die Reihe, Spalte und Untermatrix in eine Liste speichern um dann zuzugreifen, allerdings sagt er mir dann:
__repr__ returned non-string (type int)


Bin für jeden Hinweis dankbar.

EDIT:
Sry, jetzt erst gesehen!

http://www.python-forum.de/pastebin.php?mode=view&s=377
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@universum2000: die Fehlermeldung ist doch eindeutig. Was soll Deiner Meinung nach »__repr__« überhaupt machen? Der gezeigt Code ist für mich im Übrigen völlig unverständlich: »generate_notes« erzeugt nur Listen, die sofort wieder verworfen werden, macht also nichts. »get_row« ist fehlerhaft und liefert eine Kopie oder ??
universum2000
User
Beiträge: 3
Registriert: Sonntag 22. Dezember 2013, 17:54

Das ist das Problem, der Code wurde uns (Studenten) einfach hingeworfen und wir müssen es als Grundlage für weitere Anpassungen nehmen.

Kann leider nicht den ganzen Code hochladen, da es nicht mein Eigenwerk ist, sonst würde ich es veröffentlichen.
Ganz allgemein, __repr__ wird als eine Art Schutzmechanismus gedacht?


In generate_notes ist die Idee, dass ich für einen Eintrag die Reihe, Spalte und 3x3 Matrix in eine Liste packe (so geschehen) und dann die nicht vorhandenen Zahlen als Hinweis ausgebe (Spielmechanik von Sudoku).

Leider komme ich seit 2 Stunden nicht auf den Fehler, wieso ich keine Elemente der Liste auslesen kann ohne einen Fehler zu kassieren.
BlackJack

@universum2000: Nein `__repr__()` ist kein Schutzmechanismus sondern eine Methode die eine Repräsentation als Zeichenkette zurück geben soll. Im Gegensatz zu `__str__()` ist die Zeichenkette nicht für Benutzer sondern für Programmierer gedacht, sollte also Informationen enthalten die bei der Fehlersuche helfen können. Per Konvention wird normalerweise eine Zeichenkette geliefert, die wenn sie ausgewertet wird, wieder ein äquivalentes Objekt erstellt. Falls das nicht gemacht wird, dann ist die Information in der Zeichenkette üblicherweise in '<' und '>' eingefasst und umfasst den Datentyp und genug Werte um verschiedene Objekte von einerander unterscheiden zu können.

Wofür `__repr__()` gedacht ist, hättest Du in der Python-Dokumentation nachlesen können.
universum2000
User
Beiträge: 3
Registriert: Sonntag 22. Dezember 2013, 17:54

Hat sich erledigt, habe den Fehler gefunden, lag daran, dass die Listenelemente ein Objekt einer Klasse waren und keine "konventionellen" Datentypen.
BlackJack

@universum2000: Was ist denn ein ”konventioneller” Datentyp? Anders gefragt, was ist denn Deiner Meinung nach der Unterschied zwischen einer Klasse und einem Datentyp in Python?
Antworten