[IronPython] Iteration via __getitem__ doesn't work in the Visual Studio debugging environment

Dino Viehland dinov at microsoft.com
Wed Sep 8 17:47:13 PDT 2010


Tony wrote:
> I have this program:
> 
> class A(object):
>     def __init__(self):
>         self.data = range(5)
>     def __getitem__(self, item):
>         return self.data[item]
> a = A()
> for v in a:
>     print v
> 
> i.e. there's a class that gets iteration through the __getitem__
> method.  When run with IronPython in the shell (or with CPython), you
> get the expected result:
> 
> C:\>"c:\Programs\IronPython 2.7\ipy.exe" Program.py
> 0
> 1
> 2
> 3
> 4
> 
> C:\>c:\Python27\python.exe Program.py
> 0
> 1
> 2
> 3
> 4
> 
> Underneath, of course, this is doing a[0], a[1], a[2], a[3], a[4], and
> stopping when a[5] raises an IndexError.
> 
> When I run this in Visual Studio, the debugger catches the IndexError,
> so this doesn't work.  It seems like the exception should be allowed
> to propagate further, so that the iteration works - but maybe this
> just isn't compatible with how the debugger works?
> 
> (It's easy enough to fix this by defining _iter__, of course).
> 
> Is this a bug?  Or just a limitation of how the debugging environment
> works?

If you hit F5 and continue execution it should keep on running.  You can 
also disable breaking on exceptions via Debug->Exceptions and uncheck the
"thrown" column for CLR exceptions.  It should just be breaking so you can
look around and seeing what's going on.




More information about the Users mailing list