Bullet proof passing numeric values from NMEA data stream.

Doug Gray doug at localhost.localdomain
Tue Mar 20 09:53:24 EDT 2007


On Wed, 21 Mar 2007 00:29:00 +1100, Steven D'Aprano wrote:

> On Tue, 20 Mar 2007 12:09:29 +0000, Doug Gray wrote:
> 
>> Folks,
>> I am looking for a fast but most importantly a bullet proof method to pass
>> and NMEA data stream (GPS output) ascii numeric strings. The best I can
>> offer is:
>> 
>> def fint(a):
>>  try: return int(float(a))
>>  except: return 0
> 
> 
> Will your application calculate the wrong results if it starts getting a
> whole lot of spurious zeroes? Wouldn't it better to signal "this value is
> invalid" rather than a false zero?
> 
> Do you actually want ints? It seems to me that if your data stream is
> delivering floats, you're throwing away a lot of data. For example, if the
> data stream is: 
> 
> 2.4, 5.7, 3.9, 5.1, ...
> 
> you're getting:
> 
> 2, 5, 3, 5, ...
> 
> which is possibly not even the right way to convert to ints. Shouldn't you
> be rounding to nearest (i.e. 2, 6, 4, 5, ...)?
> 
> [snip]
> 

Thanks, a very helpful response. I'll need some time to fully digest.
Yes I will need a float variant, the int version was by way of example. I
can deal with the rounding etc as necessary, but I was after an
pythonistic view of the generic problem.

Re the examples: whitespace and mal positioned signs and decimal point
would be the obvious errors I might expect but of course this is
speculation.  The few GPS units I have tried have all tripped up my first
cut less tolerant code.  I am going to revise the interface to work around
potential problems and my preliminary test efforts highlighted more
exceptions than I expected.

Doug





More information about the Python-list mailing list