Seite 1 von 1

Bitte helfen: IndentationError expected an indented block

Verfasst: Sonntag 30. März 2014, 14:13
von hani
bei "global uagent" steht IndentationError: expected an indented block
kann mich jemand helfen bitte. wo liegt das problem?

Code: Alles auswählen

def user_agent():
	global uagent
	uagent=[]
	uagent.append("uagent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14")
	uagent.append("Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:26.0) Gecko/20100101 Firefox/26.0")
	uagent.append("Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3")
	uagent.append("Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)")
	uagent.append("uagent=[]Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.7 (KHTML, like Gecko) Comodo_Dragon/16.1.1.0 Chrome/16.0.912.63 Safari/535.7")
	uagent.append("Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)")
	uagent.append("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1")
	return(uagent)

Re: Bitte helfen: IndentationError expected an indented bloc

Verfasst: Sonntag 30. März 2014, 14:21
von EyDu
Die Fehlermeldung ist dort recht eindeutig: deine Einrückung ist fehlerhaft. Entweder hast du gar keine Einrückung verwendet oder Tabs und Spaces vermischt. Verwende zum Einrücken immer vier Spaces, das ist Standard. Ggf. solltest du deinen Editor noch so einstellen, dass ein Tab durch vier Spaces ersetzt wird.

Noch ein paar allgemeine Sachen: setzte den Code hier im Forum doch bitte in Code-Tags, dann kann man den auch vernünftig lesen. Über dem Eingabefenster gibt es dazu entsprechende Buttons. Auch solltest du bei Fehlern immer die gesamte Fehlermeldung, also inklusive Traceback, hier posten und nicht nur den Teil, den du für relevant hältst. Da stecken noch viel mehr Informationen drin, mit denen du vielleicht noch nichts anfangen kannst, andere aber schon.

Auch solltest du dir gleich abgewöhnen "global" zu verwenden, das wird fast nie benötigt. Und wenn dir nicht vollkommen klar ist, dass du global an einer Stelle benutzen musst, dann ist das ein deutliches Zeichen dafür, dass du es nicht benutzen solltest. Werte betreten Funktionen über Parameter und verlassen Funktionen als Rückgabewert, ggf. wird der Zustand auch mittels Klassen verwaltet.

Re: Bitte helfen: IndentationError expected an indented bloc

Verfasst: Sonntag 30. März 2014, 14:30
von BlackJack
@hani: Diese ganzen `append()`-Aufrufe sind auch unsinnig. Das kann man doch viel einfacher gleich als *ein* Listenliteral schreiben, anstatt ein leeres Listenliteral hinzuschreiben und diese Liste dann Element für Element mit jeweils einem eigenen Methodenaufruf zu füllen. Das ist doch kein Java hier. :-)

Re: Bitte helfen: IndentationError expected an indented bloc

Verfasst: Sonntag 30. März 2014, 19:48
von hani
Vielen Danke für die rasche Antwort, aber kann mir jemand mal konkret den Fehler oder die richtige Schreibweise post?

Dank an die Spezialisten.....
Hani

Re: Bitte helfen: IndentationError expected an indented bloc

Verfasst: Sonntag 30. März 2014, 19:54
von BlackJack
@hani: Bei dem Quelltext so wie er jetzt im ersten Beitrag steht gibt es keinen Syntaxfehler.

Was mir noch zusätzlich zum bisher gesagten auffällt: `uagent` ist kein guter Name für die Liste. Bei so einer Abkürzung muss man raten wofür das `u` steht. Ausserdem ist da nicht nur *ein* „user agent” an den Namen gebunden, sondern eine Liste, also wäre ein passenderer Name `user_agents`.

Der Funktionsname ist auch nicht besonders gut, weil er wie ein Wert klingt und nicht wie eine Tätigkeit.

``return`` ist keine Funktion, also sollte man diese Anweisung auch nicht so schreiben wie man Funktionsaufrufe schreibt.

Edit: Der Wert, der in Zeile 8 der Liste hinzugefügt wird, soll nicht wirklich *so* aussehen, oder?

Re: Bitte helfen: IndentationError expected an indented bloc

Verfasst: Montag 31. März 2014, 14:57
von aibo
Hey,

leider weiß ich nicht, was du genau machen möchtest. Mit dem Code unten funktioniert es auf jeden Fall. Die Methode "user_agent()" liefert die ein Array zurück. Dieses Array kannst du dann durch einen Aufruf zuweisen. So bekommst du auch die Werte aus der Methode geliefert.

Code: Alles auswählen

def user_agent():
    uagent = ['uagent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14',
              'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:26.0) Gecko/20100101 Firefox/26.0',
              'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3',
              'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)',
              'uagent=[]Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.7 (KHTML, like Gecko) Comodo_Dragon/16.1.1.0 Chrome/16.0.912.63 Safari/535.7',
              'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)',
              'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1'
              ];
    return uagent;

Re: Bitte helfen: IndentationError expected an indented bloc

Verfasst: Montag 31. März 2014, 15:10
von BlackJack
@aibo: Die Semikolons machen keinen Sinn, und den Namen `uagent` könnte man sich hier auch sparen und gleich die Liste als Ausdrück hinter das ``return`` schreiben. Und dann stellt sich natürlich als nächstes die Frage ob die Funktion wirklich Sinn macht, oder ob man diese Liste nicht einfach als Konstante definieren kann.