_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" <guido at 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 <dinov at 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 at 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 at python.org > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: http://mail.python.org/mailman/options/python-dev/python%40rcn.com >
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4