[FOSSGIS-Talk] QGIS Python-Konsole "Indentation Error", Python-Editor kein "Indentation Error"

Hannes hannes at enjoys.it
Di Sep 27 21:05:01 CEST 2022


Hey Christiane,

in der Konsole wird jede Zeile einzeln eingelesen und für einfache
Statements direkt ausgeführt.

Wenn ein eingerückter Codeblock kommt, wie ein if-Block oder eine
Schleife, dann weiß der Interpreter, dass er mit der Ausführung des
Blocks noch warten soll, weil ja weitere, eingerückte Zeilen kommen.

Sobald dann eine leere Zeile eingegeben wird, nimmt der Interpreter das
als Zeichen dafür, dass der Codeblock zu Ende ist und führt ihn aus.

Folgt dann eine weitere eingerückte Zeile, gehört sie für den
Interpreter nicht mehr zu dem Codeblock, der ja gerade schon als
"komplett" angesehen und ausgeführt wurde. Also sollte dieses Statement
ja nicht eingerückt sein -> Der Interpreter meldet einen
IndentationError.

Es liegt also daran, dass du am Ende des eingerückten Blocks der
if-Verzweigung eine Leerzeile hat.

Aber! Bzw.: Fazit: Die Konsole sollte man nie dafür benutzen, mehr als
EINZELNE Codezeilen zu Testzwecken hinein zu kopieren, sonst kann im
schlimmsten Fall Schlimmes passieren, weil das "Skript" völlig anders
ausgeführt wird als gedacht.

Viele Grüße
Hannes

On Mon, 26 Sep 2022 13:43:26 +0200
"Chr. Enderle via FOSSGIS-Talk-Liste" <fossgis-talk-liste at fossgis.de>
wrote:

> Hallo Liste,
> 
> mir ist aufgefallen, dass die Python-Konsole in QGIS (3.22) bei 
> Leerzeilen im Code "IndentationError" meldet, während der
> Python-Editor dasselbe Script ohne Fehlermeldung verarbeitet.
> 
> Es handelt sich um einzelne Leerzeilen gefolgt von einem Kommentar,
> die ich z.B. im Verlauf einer for-Schleife wegen der
> Übersichtlichkeit eingefügt habe. Einen Beispiel-Ausschnitt aus dem
> Script siehe unten. In dem Beispiel haben die Leerzeilen keine
> Einrückung. Ich füge das gesamte Script per copy & paste in die
> Konsole bzw. den Editor ein. In der Konsole führt es zur genannten
> Fehlermeldung. Wenn das Script dagegen aus dem Editor heraus
> gestartet wird, läuft es fehlerfrei.
> 
> Gibt es dafür eine Erklärung?
> 
> Wo im Code Einrückungen nötig sind, sind sie alle mit Tabulator(en) 
> gesetzt, keine Leerzeichen.
> 
> -------------------------------------------------------------------------------------------
> 
> # Iterating over the input layer :
> for m in municip.getFeatures():
>      inh_center = m['EWZ']
> 
> # central municipalites with 0 inhabitants must be excluded; the
> value of "center_pos" will be set to -1.
>      if inh_center == 0:
>          center_pos = -1
>          dict = {m.fieldNameIndex('center_pos'):center_pos}
>          municip.dataProvider().changeAttributeValues({m.id(): dict})
> 
> # Extract by location:
>      else:
>          key = m['AGS']
>          municip.selectByExpression('\"AGS\" = ' + str(key), 
> QgsVectorLayer.SetSelection)
>          result = 
> processing.run("qgis:extractbylocation",{'INPUT':QgsProcessingFeatureSourceDefinition(municip.id(),False),'PREDICATE':4,'INTERSECT':QgsProcessingFeatureSourceDefinition(municip.id(),True),'OUTPUT':'memory:'})
>          extracted = result['OUTPUT']
>          count_all = extracted.featureCount()
>          countsmall = 0
> 
> ----------------------------------------------------------------------------------------
> 
> Viele Grüße,
> 
> Christiane
> 
> 
> -- 
> Christiane Enderle, MSc
> Philipps-Universität Marburg
> Fachbereich Geographie
> Deutschhausstr. 10
> 35037 Marburg
> Tel. +49 (0)6421-2822179
> Fax +49 (0)6421-2828950
> 


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste