On 12/14/09, exar...@twistedmatrix.com <exar...@twistedmatrix.com> wrote: > On 02:50 am, lie.1...@gmail.com wrote: >>On 12/14/2009 9:45 AM, exar...@twistedmatrix.com wrote: >>>On 08:18 pm, st...@remove-this-cybersource.com.au wrote: >>>>On Sun, 13 Dec 2009 14:35:21 +0000, exarkun wrote: >>>>>>StopIteration is intended to be used only within the .__next__ >>>>>>method of >>>>>>iterators. The devs know that other 'off-label' use results in the >>>>>>inconsistency you noted, but their and my view is 'don't do that'. >>>>> >>>>>Which is unfortunate, because it's not that hard to get >>>>>StopIteration >>>>>without explicitly raising it yourself and this behavior makes it >>>>>difficult to debug such situations. >>>> >>>>I can't think of any way to get StopIteration without explicitly >>>>raising >>>>it yourself. It's not like built-ins or common data structures >>>>routinely >>>>raise StopIteration. I don't think I've *ever* seen a StopIteration >>>>that >>>>I didn't raise myself. >>> >>>Call next on an iterator. For example: iter(()).next() >> >>.next() is not meant to be called directly > > Doesn't matter. Sometimes it makes sense to call it directly. And I > was just giving an example of a way to get StopIteration raised without > doing it yourself - which is what Steve said he couldn't think of. >>> >>>I'm surprised to hear you say that the magical faerie land behavior >>>isn't desirable either, though. I'd love a tool that did what I >>>wanted, >>>not what I asked. The only serious argument against this, I think, is >>>that it is beyond our current ability to create (and so anyone >>>claiming >>>to be able to do it is probably mistaken). >> >>In your world, this is what happens: >> >>> list = [a, b, c] >> >>> # print list >> >>> print list >>["a", "b", "c"] >> >>> # make a copy of list >> >>> alist = list(llst) # oops a mistype >> >>> alist = alist - "]" + ", "d"]" >> >>> print alist >>["a", "b", "c", "d"] >> >>> alist[:6] + "i", + alist[6:] >> >>> print alist >>["a", "i", "b", "c", "d"] >> >>> print alist >> >>> # hearing the sound of my deskjet printer... >> >>> C:\fikle.text.write(alist) >> >>> print open("C:\file.txt").read() >><h1>a</h1> >><ul> >><li>i</li> >><li>b</li> >><li>c d</li> >> >>> # great, exactly what I needed > > I don't understand the point of this code listing, sorry. I suspect you > didn't completely understand the magical faerie land I was describing - > where all your programs would work, no matter what mistakes you made > while writing them.
Exactly, that's what's happening. It just works. It knows that when I said alist[:6] + "i", + alist[6:] ; I want to insert "i" between the sixth character of the textual representation of the list. It knows to find the correct variable when I made a typo. It correctly guess that I want to print to a paper instead of to screen. It knows that when I wrote to C:\path.write(), it knows I wanted a HTML output in that specific format. It just works (TM), whatever mistakes I made. That's what you wanted, right? -- http://mail.python.org/mailman/listinfo/python-list