_PyObject_LengthHint() is specified to never fail.
If any exception occurs along the way, it returns a
default value. In the context of checking for length
hints from an iterator, this seems reasonable to me.
If you want this changed, I can use a negative return
value for other than an attribute error, and modify
the calling code to handle the exception.
To me this isn't worth making the code slower and
more complex. But I can also see wanting to catch
a SystemError at any possible step.
I presume this same issue occurs everywhere the C API
has a *this never fails* specification so that we have
simpler, faster calling code at the expense of being able
to raise a SystemError in every possible piece of code.
Raymond
From: "Guido van Rossum" <gu...@python.org>
There seems to be an unconditional PyErr_Clear() in
_PyObject_LengthHint(). I think that could and should be much more
careful; it probably should only ignore AttributeErrors (though there
may be unittests to the contrary).
On Tue, Jan 13, 2009 at 8:24 PM, Dino Viehland <di...@microsoft.com> wrote:
We had a bug reported that effectively boils down to we're not swallowing exceptions when list calls __len__
(http://www.codeplex.com/WorkItem/View.aspx?ProjectName=IronPython&WorkItemId=20598).
We can obviously make the change to catch exceptions here in IronPython even if it seems like a bad idea to me ☺ But CPython
seems to catch not only normal exceptions, but also SystemExit. It seems like there's been a move away from this so I thought
I'd mention it here. I tested it on 2.6.1 and 3.0.
import sys
class A(object):
def __iter__(self): return iter(range(10))
def __len__(self):
try:
print('exiting')
sys.exit(1)
except Exception as e:
print('can I catch it?', e)
list(A())
which prints:
exiting
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/guido%40python.org
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: http://mail.python.org/mailman/options/python-dev/python%40rcn.com
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com