Hi Nyall,

Thank you for your time! I really appreciate it and will definitely implement 
those suggestions as well.

I am using QGIS 3.4 however the bug seems to be resolved with the your 
suggestions and if I save the script to the processing toolbox rather than run 
it from the editor. 

Kind regards,
Bjorn

-----Original Message-----
From: Nyall Dawson <nyall.daw...@gmail.com> 
Sent: Friday, February 01, 2019 12:21 AM
To: Bjørn Burr Nyberg <bjorn.nyb...@uib.no>
Cc: qgis-developer@lists.osgeo.org
Subject: Re: [QGIS-Developer] free variable 'self' referenced before assignment 
in enclosing scope

On Thu, 31 Jan 2019 at 02:46, Bjørn Burr Nyberg <bjorn.nyb...@uib.no> wrote:
>
> Dear QGIS community,
>
> In the spirit of open-source I am trying to convert a set of scripts that ive 
> designed in ArcMap to QGIS 3.x. I hope that this will enable a broader 
> community of individuals to use the workflows ive designed. The original 
> scripts can be found at 
> https://github.com/BjornNyberg/NetworkGT/tree/master/Scripts

Great!

> My problem is that in my first attempt to convert the scripts, QGIS either 
> crashes or gives the following error.
>
> 2019-01-30T16:51:27     WARNING    Traceback (most recent call last):
>               File 
> "C:/PROGRA~1/QGIS3~1.4/apps/qgis/./python/plugins\processing\gui\AlgorithmDialog.py",
>  line 238, in on_complete
>               self.feedback.pushInfo(self.tr('Execution completed in {0:0.2f} 
> seconds').format(time.time() - start_time))
>              NameError: free variable 'self' referenced before assignment in 
> enclosing scope
>

This was a bug fixed already - are you on QGIS 3.4?

Anyone, the problem stems from this line:

    templines = st.run('native:splitwithlines',parameters)

This should be:

    templines =
st.run('native:splitwithlines',parameters,context=context,
feedback=feedback)

I.e. you need to pass the child algorithm the context and feedback
objects given to your algorithm, to allow that child algorithm to push
feedback messages and access existing map layers.


Two other suggestions:

            except Exception as e:

feedback.pushInfo(QCoreApplication.translate('Sample_Area','%s'%(e)))

Here this would be better as:

            except Exception as e:

feedback.reportError(QCoreApplication.translate('Sample_Area','%s'%(e)))

(reportError instead of pushInfo)

And

for part in geom: #Check for multipart polyline
    parts.append(QgsGeometry.fromPolyline(part)) #intersected geometry

This should be

for part in geom.asGeometryCollection(): #Check for multipart polyline
    parts.append(QgsGeometry.fromPolyline(part)) #intersected geometry

(or, nicer for 3.4):

for part in geom.parts(): #Check for multipart polyline
    parts.append(QgsGeometry.fromPolyline(part)) #intersected geometry


Hope that helps!
Nyall






> I have established that this error occurs at the very end of the script when 
> calling ' return {self.Branches:dest_id,self.Nodes:dest_id2}'. I do not 
> believe that I have explicitly defined self  anywhere in the processAlgorithm 
> function itself. The algorithms themselves work as intended and the 
> shapefiles are created before the program crashes.
>
> I am not a programmer by trait so I'm not entirely sure how to problem solve 
> this error and any help would be most appreciated. I can also provide a test 
> dataset if that is helpful.
>
> Cheers,
> Bjorn
> -----------------------------
> Postdoctoral Fellow
> Department of Earth Science, University of Bergen
> PO Box 7803, 5020, Bergen, Norway
> +47 485 024 08
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to