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

Chr. Enderle enderlec at staff.uni-marburg.de
Do Sep 29 17:52:13 CEST 2022


Hallo Hannes,

vielen Dank, dass du dir die Zeit für diese ausführliche Erklärung 
genommen hast! Das klingt total logisch und leuchtet mir ein!

Viele Grüße,

Christiane

Am 27.09.2022 um 21:05 schrieb Hannes:
> 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
>>
-- 
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