buffer interface problem

2010-01-07 Thread Andrew Gillanders
I have run into a problem running a Python script that is part of the  
TerraGear suite for building scenery for FlightGear. I am using Mac  
OS X 10.4, running Python (version 3.0.1) in a Unix terminal.


The purpose of the script is to walk a directory tree, unzipping  
files, and passing the contents to an executable C programme. The  
problem occurs here:


gzin = GzipFile(fname, 'rb')
data = gzin.readline()
min_x,min_y = map(atoi,data.split()[:2])

The input file, when uncompressed, is an ASCII file with a line with  
two numbers, then a line of four numbers, then many long lines of  
numbers. I can see what the last is trying to do: split the string  
into two words, convert them to integers, and assign them to min_x  
and min_y.


At the third line, I get the message "expected an object with the  
buffer interface". Which object is it referring to? Have some  
functions been changed to pass buffer objects instead of strings? How  
can I fix the source code to make it run?


Any help appreciated
Andrew
(Python newbie)

--
http://mail.python.org/mailman/listinfo/python-list


Re: buffer interface problem

2010-01-07 Thread Andrew Gillanders
Thanks Chris. The atoi function was coming from the locale library  
(from locale import atoi). I changed it to int and now it works.


The next hurdle is this:
gzin = GzipFile(fname, 'rb')

data = gzin.readline()
#min_x,min_y = map(atoi,data.split()[:2])
min_x,min_y = map(int,data.split()[:2])

data = gzin.readline()
#span_x,step_x,span_y,step_y = map(atoi,data.split()[:4])
span_x,step_x,span_y,step_y = map(int,data.split()[:4])

data = gzin.read().split('\n')

The last line is a problem, giving me this message: Type str doesn't  
support the buffer API (I am guessing a conflict between split and  
read?)


Sorry, I am new to Python, so how do I get a Traceback?

Thanks
Andrew


On 07/01/2010, at 7:13 PM, Chris Rebert wrote:


On Thu, Jan 7, 2010 at 12:19 AM, Andrew Gillanders
 wrote:

I have run into a problem running a Python script that is part of the
TerraGear suite for building scenery for FlightGear. I am using  
Mac OS X

10.4, running Python (version 3.0.1) in a Unix terminal.

The purpose of the script is to walk a directory tree, unzipping  
files, and
passing the contents to an executable C program. The problem  
occurs here:


   gzin = GzipFile(fname, 'rb')
   data = gzin.readline()
   min_x,min_y = map(atoi,data.split()[:2])

The input file, when uncompressed, is an ASCII file with a line  
with two
numbers, then a line of four numbers, then many long lines of  
numbers. I can
see what the last is trying to do: split the string into two  
words, convert

them to integers, and assign them to min_x and min_y.

At the third line, I get the message "expected an object with the  
buffer

interface". Which object is it referring to?


The elements of the list produced by `data.split()[:2]`, which are
either Unicode strings or bytestrings, neither of which are buffers.


Have some functions been
changed to pass buffer objects instead of strings? How can I fix  
the source

code to make it run?


The error is being raised by the atoi() function (in the future,
please post the full Traceback, not just the final error message).
What module/library does your atoi() function come from (look for an
`import` statement mentioning it)?
The only functions by that name in the Python standard library both
operate on strings, not buffers, and thus can't be the same one your
code is using.

In any case, replacing `atoi` with `int` in your code will likely
solve the problem. The built-in int() function* can convert strings to
integers.

Cheers,
Chris
--
http://blog.rebertia.com

*Not really a function, but close enough for newbie explanatory  
purposes.


--
http://mail.python.org/mailman/listinfo/python-list