From: Fredrik Lundh on
Mark Peters wrote:

> However, the typical Python way to iterate through a list for be to
> use a for loop. Perhaps replace the while statement with:
> for Townshp in Townshps:
> and remove the "Townshp = Townshps.next()" lines

that assumes that the feature class list is actually a Python iterable,
of course, and not just something that happens to have a "next" method.

:::

.... and judging from the documentation

http://webhelp.esri.com/arcgisdesktop/9.1/index.cfm?TopicName=ListFeatureClasses%20method

it's not an iterable.

:::

you could of course replace the

fcs = gp.ListFeatureClasses()
fc = fcs.next()
while fc:
...
fc = fcs.next()

pattern with

for fc in iter(gp.ListFeatureClasses().next, None):
...

but maybe that's a bit too clever for an absolute novice ;-)

</F>

From: Bruno Desthuilliers on
thompson.marisa(a)gmail.com a �crit :
> Hi.
>
> I'm extremely new to Python and programming as a whole. I have written
> a python script with the assistance of ESRI ArcGIS 9.2, which uses
> Python 2.4.1, however, it gives me this error when I try to run it.

Please post the full traceback. It's meant to help finding out what went
wrong, you know...

> I've already posted at ESRI support, and I was hoping that Python
> people could help me more.
>
> I hope there is something simple I could do to be able to define the
> object that it thinks is NoneType.

That's certainly not the solution...

> Please when someone responds,
> please treat me as an absolute novice.
>
> Thank you,
> Marisa
>
> Here is my code:
>
(snip)
> #Get list of Town Shapefiles
> Townshp = gp.ListFeatureClasses ("*")
(snip)
>
> Townshp = Townshps.next()
> while Townshps !="":

1/ where does this "Townshps" comes from ?
2/ naming conventions are to use either all_lower (preferred) or at
least mixedCase names for variables. And by all mean be consistent.
3/ if Townshp is a shortcut for Township, then it would be better to
keep the full word
4/ the Python 'for' loop is meant to iterate over an iterable and taking
care of boundaries, so you'd be better using it:

townships = gp.ListFeatureClasses ("*")
for township in townships:
doSomethingWith(township)
From: Carsten Haese on
On Wed, 2006-12-20 at 11:33 -0800, Mark Peters wrote:
> Warning: I know nothing about the Python ArcGIS stuff.
>
> The first thing that jumps out at me is your while condition. You are
> testing "Townshps" when it seems from the code that you should be
> testing "Townshp". However, the typical Python way to iterate through
> a list for be to use a for loop.
> Perhaps replace the while statement with:
> for Townshp in Townshps:

I was considering suggesting this, but I'm not sure there is much hope
that this would work. The posted code suggests that Townshps.next()
returns "" or None when the end of the list is reached. In order for the
for loop to work, it would have to raise StopIteration instead. (I
suppose it is conceivable that iter(Townshps) would return an object
that does behave in the required manner, but I wouldn't bet a lot of
money on that.)

Of the course if Townshps does not support the iteration protocol, the
for loop could still be written using the iter(callable,sentinel)
pattern, but let's not confuse this poor newbie more than necessary ;)

-Carsten


From: Bruno Desthuilliers on
Bruno Desthuilliers a �crit :
> thompson.marisa(a)gmail.com a �crit :
>
> 4/ the Python 'for' loop is meant to iterate over an iterable and taking
> care of boundaries, so you'd be better using it:
>
> townships = gp.ListFeatureClasses ("*")
> for township in townships:
> doSomethingWith(township)

Actually, forget the for loop (cf Fredrik's post - looks like
gp.ListFeatureClasses() doesn't return an iterable...)
From: thompson.marisa on
I've had a lot of replies suggesting different things. These are the
results:

When I change

while Townshps !="": to
while Townshp is not None:

and when I change

while Townshps !="": to
for Townshp in iter(gp.ListFeatureClasses().next, None):

They both work perfectly, and it solved my problem.

Thank you all so much.
Marisa


On Dec 20, 2:22 pm, Fredrik Lundh <fred...(a)pythonware.com> wrote:
> thompson.mar...(a)gmail.com wrote:
> > I'm extremely new to Python and programming as a whole. I have written
> > a python script with the assistance of ESRI ArcGIS 9.2, which uses
> > Python 2.4.1, however, it gives me this error when I try to run it.
> > I've already posted at ESRI support, and I was hoping that Python
> > people could help me more.
>
> > I hope there is something simple I could do to be able to define the
> > object that it thinks is NoneType.that would be the None object.
>
> http://effbot.org/pyref/None
>
> which is often used as a placeholder in Python.
>
> my guess is that it's the next() call that returns None when you've
> reached the end of the shapefile list; try changing
>
> while Townshps !="":
>
> to
>
> while Townshps is not None:
>
> and see if the problem goes away.
>
> if you still get an exception, please post the full traceback; see
>
> http://effbot.org/pyfaq/tutor-i-need-help-im-getting-an-error-in-my-p...
>
> for details.
>
> </F>