string.split returns empty when unaccessed
Jonathan Pennington
john at coastalgeology.org
Sat Jan 20 22:43:59 EST 2001
I'm having a problem spliting a string that is not accessed in some
way before the split. I am using the pygarmin module (modified) and
wxPython to build a GUI mapping program on a FreeBSD system with the
Python port v2.0. The code that retrieves the list is very long and
spans 3 modules, so it is not included here. I'm hoping that this is a
known problem or at least understandable from this limited info, and
the code is not needed, but I can provide it offlist if necessary.
Given a string foo returned from a class instance, string.split(foo,
'sep') returns [''] instead of a list of string items. However, if I
print foo, then try string.split(foo, 'sep') I *will* get a good
list. Copying as foo = foo[:] before splitting causes the same
behavior.
What happens is:
> gps = garmin(UnixSerialLink('/dev/cuaa0'))
> w = gps.getWaypoints()
> t = string.split(w, '|R|')
> print t
['']
> w = gps.getWaypoints()
> w = w[:]
> t = string.split(w,'|R|')
> print t
['']
> w = gps.getWaypoints()
> print 'w'
[... waypoints ...]
> t = string.split(w,'|R|')
> print t
['name:V:stuff','cmnt:V:more stuff','lat:V:number','lon:V:number'...]
I can't figure out why that would happen, has anyone seen this before?
I can't seem to find a reference to the behavior anywhere. I'm still
new to the Python object model, but referencing it before splitting
doesn't seem like it should change it at all.
I've changed quite a bit in PyGarmin and there's a lot of code
accessed, but the instance that returns the string is below. Thanks.
--------------class follows---------------------
import UserString
class D104(Waypoint, UserString.UserString):
parts = Waypoint.parts + ("dst", "smbl", "dspl")
fmt = "<6s l l L 40s f h b"
def __init__(self, ident="", slat=0L, slon=0L, cmnt="", dst=0L, smbl=0L, dspl=0L):
self.ident = ident # text identidier (upper case)
self.slat = slat # lat & long in semicircle terms
self.slon = slon
self.cmnt = cmnt # comment (must be upper case)
self.unused = 0L
self.dst = dst # proximity distance (m)
self.smbl = smbl # symbol_type id
self.dspl = dspl # D104 display option
self.data = ""
def __repr__(self):
self.data = "name:V:%s|R|cmnt:V:%s|R|lat:V:%i|R|lon:V:%i|R|dst:V:%i|R|smbl:V:%i|R|dspl:V:%i" % \
(self.ident, self.cmnt, self.slat, self.slon, self.dst, \
self.smbl, self.dspl)
return self.data
--
Jonathan Pennington | http://coastalgeology.org
Site Manager | Protection and stewardship
CoastalGeology.Org (CGO) | through public education.
john at coastalgeology.org | Join CGO, make a difference.
More information about the Python-list
mailing list