[QGIS-Developer] free variable 'self' referenced before assignment in enclosing scope

Nyall Dawson nyall.dawson at gmail.com
Fri Feb 1 01:20:44 PST 2019


On Fri, 1 Feb 2019 at 19:18, Bjørn Burr Nyberg <Bjorn.Nyberg at uib.no> wrote:
>
> 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.
>

Is it 3.4.4?

Nyall

> Kind regards,
> Bjorn
>
> -----Original Message-----
> From: Nyall Dawson <nyall.dawson at gmail.com>
> Sent: Friday, February 01, 2019 12:21 AM
> To: Bjørn Burr Nyberg <Bjorn.Nyberg at uib.no>
> Cc: qgis-developer at 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.Nyberg at 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 at lists.osgeo.org
> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer


More information about the QGIS-Developer mailing list