At 01:33 PM 2/10/2007 +1300, Greg Ewing wrote: >Collin Winter wrote: > > > I believe the original proposal was something like > > > > raise E(V).with_traceback(T) > >Does this mean you're not intending to have any syntactic >variant of the raise statement that includes a traceback >in 3.0?
That *is* the variant. ;) >Or is this just so that forward-compatible code >can be written in 2.6? Actually, forward compatible code would be easier with something syntactic, like your 'raise e with t' idea. It would allow the implementation to be different in 2.6 and 3.0, while using the same syntax. (In 2.6 it could use the existing machinery, while in 3.0 it could call the .with_traceback() method. Hm. Actually, that's not necessary. We could include .with_traceback(T) in 2.6, and just have old-style except: clauses delete the traceback from the returned objects. New-style except: clauses would work just as they would in 3.0. To summarize, in 2.6 we could support .with_traceback() and create exception instances with traceback attributes, but the old-style except: clauses could discard them to prevent cycles. Raising an exception instance with a __traceback__ attribute would get some special handling so that it's equivalent to 3-argument raise in today's Python. Likewise, generator.throw() would need the same special handling in 2.6. Meanwhile, sys.exc_info() still lives in both versions. To write 3.0-compatible code, you just use the 3.0 spellings of raise, throw(), and except. Sounds like a plan! _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
