Nach Klassendefinitionen -> 'def main()' -> unexp. unindent?

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
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Moin Leute,

also ich habe folgendes Problem, vielleicht könnt ihr mir weiterhelfen.
Ich habe Klassen definiert. Nach der Definition der Klassen, möchte ich eine main() - Funktion schreiben, die dann am Ende sämtlichen Codes über if __name__ == '__main__' aufgerufen werden soll.
Jedoch scheint es (mir) so, als wenn Python meint, die Definition der Klasse(n) sei noch nicht beendet, denn ich bekommen immer einen unexpected unindent-Error bei 'def main( ... )'.
Ich habe auch versucht, die 'main()' und ihren Aufruf über 'if name == main' durch eine while-Schleife zu ersetzen, aber da kommt auch nur der gleiche Fehler...

Ich habe mal die letzten Zeilen des Codes hier gepostet in der Hoffnung, jemand weiß hier weiter...


Danke schonmal!

Code: Alles auswählen

...
class Game:
	def __init__(self, player, field, trials, diff, tries, res):
		Menue.__init__(self, player, field, trials, diff)
		self.tries = tries
		self.result = res
....

def main(player, field, trials, sel_menu):
	while True:
		if sel_menu == 1:
			Menue.mainmenu()
			if go_sett = 1:
				Menue.set_range(player)
				Menue.bisection()
				Menue.difficulty()
			else:
				Game.play_game()
		elif sel_menu == 0:
			Game.play_game(player, field, trials)
		else:
			player_name = input('>> Bitte geben Sie Ihren Namen ein: ')
			print('Hallo', player_name, '!')
			player = player_name
			beg = 0
			end = 49
			Text.reading(beg,end)   
			while True:
				Menue.mainmenue()
				Menue.set_range(player_name)
				Menue.bisection()
				Menue.difficulty()
				Menue.mainmenue()
				Game.play_game()


if __name__ == '__main__':
	main()

Der Code hat aktuell ziemlich genau 280 Zeilen, weshalb ich ihn hier nicht komplett posten möchte. Sollte er nötig sein, ein kurzer Hinweis und ich hau ihn ins PasteBin...
Es kann nämlich auch sein, dass ich in der Klassen-Logik der OOP noch nicht ganz auf'm Dampfer bin...was (mir) aber Diesen Fehler (unexpected unindent) plus gelbem Pfeil (in der geany IDE) vor 'def main(...)' nicht erklären würde... :K
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bitte poste den kompletten Traceback des Fehlers. Und da sich der Fehler auch auf die Zeilen davor bezieht, sind auch die Zeilen davor wichtig.

Allgemein: Wenn du sagst, dass du den Fehler in deinem Editor bekommst, hast du es dann auch direkt mit dem Interpreter versucht?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@BSA: wenn vor »def main...« ein Fehler ist und Du ersetzt das hier durch "...", dann hilft das ja sehr weiter :?: .
Üblich sind 4 statt drei Leerzeichen Einrückung.
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Der komplette Traceback beim Aufrufen aus dem Terminal lautet:

Code: Alles auswählen

python3 guess.py
  File "guess.py", line 251
    def main(player, field, trials, sel_menu):
    ^
IndentationError: unexpected unindent

@ Sirius3: Jepp, ist ja auch eigentlich logisch. Was ich mir nur die ganze Zeit dachte, war, dass es evtl. sein könnte, dass ich Python noch irgendwie explizit mitteilen müsse, dass die Klassendefinition nun beendet ist. Dem ist aber anscheinend nicht so, ich hatte selber nämlich auch nichts dazu gefunden.
Ich lade den Code gleich über PasteBin hoch.


PasteBin
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
BlackJack

@BSA: Dann geh mal von der ``def main…``-Zeile nach oben bis zum ``try`` und schau mal wo das zugehörige ``except`` (oder ``finally``) steht.

Edit: Wenn das ausgebesser ist, dann wirst Du einen Syntaxfehler bekommen weil man mit ``==`` und nicht mit ``=`` vergleicht. Und da sind noch mehr Fehler. Ich glaube Du gehst das falsch an. Es sieht fast so aus als wenn Du fast 300 Zeilen Quelltext runtergeschrieben hast ohne irgendwas davon mal zu testen. Die Klassen machen so auch gar keinen Sinn. Namen sind teilweise viel zu nichtssagend, Kommentare sind überflüssig oder verwirrend, …
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Ach Mensch, Danke!
Ist gefixt.

Dann begeb ich mich mal an die anderen (logischen) Fehler, die sich grade aufgezeigt haben...


Ja, das ist richtig. Das ist das Problem, was ich mit der OOP habe. Ich weiß nicht, wie ich das ganze Testen soll, ohne dass es fertig ist. Daher habe ich tatsächlich alles erstmal fertiggeschrieben, um dann einzeln die Fehler durchzulaufen und zu schauen, wo verbessert werden muss. Eine bessere Möglichkeit hat sich mir bisher nicht gezeigt.
Bin wie gesagt dabei, die OOP zu lernen bzw. setze ich mich grade mit der OOP auseinander. Habe bisher nur ein Tutorial aus einem Buch abgetippt (class Fahrzeug -> class LKW(Fahrzeug) -> class PKW(Fahrzeug) ---> class Lieferwagen(PKW, LKW)

Danke für deine Hinweise. Ich werde schauen, ob und wenn ja wie ich sie umsetzen kann. Ich bin noch am rumprobieren...
Die Klassen-Aufteilung erschien mir "eigentlich" recht geordnet, werde mich aber evtl. nochmal damit auseinandersetzen müssen, sobald das Ding hier erst einmal läuft, oder anders gesagt: sobald es läuft, und ich dadurch dann weiß, wie ich in der OOP was erreichen kann, werde ich wahrscheinlich eh nochmal von vorne beginnen.


edit2: Die Klassen-Aufteilung wird geändert, die Methode Texting.reading kann auch als Methode der Klasse Game ablaufen. Das gleiche gilt wahrscheinlich auch für die Klasse Menue, aber das wird mir dann glaub ich am Anfang noch zu unübersichtlich...ich versuche erstmal, mit den beiden Klassen Game und Menue zurechtzukommen. Texting wird in Game integriert, da es ja eigentlich auch zum Spiel gehört und keine eigene Klasse bilden muss. Soweit kann ich das also schonmal, denke & hoffe ich, umsetzen...
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Antworten