IndentationError?!

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Was ist ein:

Code: Alles auswählen

IndentationError: unindent does not match any outer indentation level (xxx.py, line 28) 
Und was hat er in diesem Script zu bedeuten:

Code: Alles auswählen

monat = ""
if form.has_key("monat"):
	global monat
	monat = form.getvalue("monat",None) ####ANGEBLICH SOLL hier der Fehler sein
elif monat == "":
	global monat
	monat = time.strftime("%m",time.gmtime())

jahr = ""
if form.has_key("jahr"):
	global jahr
    jahr = form.getvalue("jahr",None)
elif jahr == "":
	global jahr
	jahr = time.strftime("%Y",time.gmtime())
	
was = ""
if form.has_key("was"):
	global was
    was = form.getvalue("was",None)
elif was == "":
	global was
	was = "kategorie,wo,was,preis"
//Damit will ich mit ein und dem selben Script verschiedene Daten aus der Datenbank abfragen, indem ich mir den SQL-Querie "dynamisch" zusammensetze...

Weitere Frage: Gibt es in Python sowas wie include bei php, mit dem Scripte inkludieren kann?

Danke!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Das sieht so erstmal richtig aus. Hast du eventuell Tabs und Spaces gemischt oder irgendwelche unsichtbaren Steuerzeichen reinbekommen? Im Zweifel kannst du mal probieren, den Code aus dem Forum wieder zurueckzupasten, dabei gehen solche Zeicheni verloren.

Wenn du ein anderes Python-Script ausfuehren willst, kannst du es einfach mit import importieren. Ansonsten schau dir mal das subprocess-Modul an.

PS: Ihgitt, ganz viel globals...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Warum, sind globals schlecht?
Kann man das irgendwie besser lösen?

//Bin noch Neuling^^

Danke erstmal!

EDIT: Du hattest Recht, da hat sich wohl irgendein "unsichtbarer" indent versteckt...
BlackJack

Kann es sein, dass Du Tabs und Leerzeichen gemischt hast!?

Ansonsten: Was sollen die ganzen ``global``-Deklarationen? Die sind ziemlich unsinnig und dort wo sie "Sinn" machen sollte man auch soweit wie möglich darauf Verzichten.

Diese ganzen Abfragen kann man jeweils auf folgendes kürzen:

Code: Alles auswählen

jahr = form.getvalue('jahr')
if jahr is None:
    jahr = time.strftime('%Y', time.gmtime())
Wenn es nichts ausmacht, wenn die Vorbelegungen in jedem Fall ausgewertet werden, reicht sogar eine Zeile:

Code: Alles auswählen

jahr = form.getvalue('jahr', time.strftime('%Y', time.gmtime()))
So etwas primitives wie ``include`` gibt's nicht. Das ist ja letztendlich copy'n'paste-Programmierung.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SchneiderWeisse hat geschrieben:Warum, sind globals schlecht?
Kann man das irgendwie besser lösen?
Weil sie die Lesbarkeit (=Verständlichkeit) drastisch mindern.

Die saubere Lösung wäre eine Funktion zum parsen des Formulars zu nutzen, die die Werte zurückgibt. Noch sauberer wäre es `FormEncode` zu verwenden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

mach ich das dann so?

Code: Alles auswählen

monat = None
monat = monat_def()
def monat_def():
	if form.has_key("monat"):
	    return form.getvalue("monat",None)
	elif monat == None:
	    return time.strftime("%m",time.gmtime())
BlackJack

Was ist denn gegen ein einfaches

Code: Alles auswählen

monat = form.getfirst('monat', time.strftime('%m', time.gmtime()))
einzuwenden!?

Ansonsten ist das Zuweisen von `None` überflüssig wenn man gleich danach etwas anderes zuweist. Und Funktionen müssen definiert sein, bevor man sie aufrufen kann.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

nichts, nichts...

Danke!

wollts nur wissen.
Antworten