threading error (NameError: name 'xxx' is not defined)
-
hi all,
I am trying to make a Class that merges L76GNSS and micropyGPS. I would like to create a thread to feed the micropyGPS object with NMEA data in the background.
My code is here; https://github.com/gregcope/L76micropyGPS.
Basically;
class L76micropyGPS: def __init__(self, my_gps, pytrack=None, sda='P22', scl='P21', timeout=None): <snippage> # start thread feeding microGPS _thread.start_new_thread(feedMicroGPS, '') def feedMicroGPS(self): # <snippage> while True: # get some NMEA data someNmeaData = self.i2c.readfrom(GPS_I2CADDR, 128) print(" feedGps_thread - gpsChars recieved : {}".format(len(someNmeaData))) # Pass NMEA data to micropyGPS object for x in someNmeaData: self.my_gps.update(x)
However I get this error;
Traceback (most recent call last):
File "main.py", line 21, in <module>
File "/flash/lib/L76micropyGPS.py", line 41, in init
NameError: name 'feedMicroGPS' is not definedWhat I am doing wrong?
-
Functions and methods are actually different things and exist in different scopes.
You can't look up a method by name without the self. (or similiar) prefix. Unless you bind it to another name in the current scope.The same applies to class methods.
-
Brilliant. Thanks. Now fails much further on!
I had assumed that as methods in python are declared as functions that this should just work(tm).
Thanks again.
-
@gregcope you call _thread.start_new_thread(feedMicroGPS, '') can't find
feedMicroGPS
which is to be expected, it's definition is not in the scope of the init method.You should either be using self.feedMicroGPS or cls.feedMicroGPS (if it where a class method).
The examples use a function not a method.