Guido van Rossum wrote:
> On 1/8/07, Collin Winter <[EMAIL PROTECTED]> wrote:
>> FWIW, I wasn't aware that things like "except T, (a, b, c):" were
>> possible until I started work on this patch; I thought <name> was all
>> you _could_ use.
>
> And, given the secial semantics for this position, I would support
> changing the syntax to *only* allow a single simple name there -- not
> even x.y.z. Thsh should handle 99.9% of existing code anyway.
>
> (And yes, if someone wants to add the 'as' keyword at the same time
> that would be great!
With such changed semantics (only allow simple name, simple name gets
deleted at the end of the except: block) I would be strongly in favour of
only having the changed semantics when the 'as' keyword is used.
This would definitely make the warning about usage of old-style exceptions
much easier - no need to try to determine if the exception name is used
outside of the block - just check for an exception clause that doesn't use
'as'.
Haven't checked the patch, but does it successfully delete the name in the
case that another exception is thrown inside the except block?
try:
raise Exception()
except Exception as e:
try:
raise Exception()
except Exception as e2:
pass
Also, what are the semantics of:
try:
raise Exception()
except Exception as e:
try:
raise Exception()
except Exception as e:
pass
print e
and
try:
raise Exception()
except Exception as e:
try:
pass
except Exception as e:
pass
print e
As I understand the proposed semantics, in the first case a NameError will
be thrown at the 'print e' line in the first case, but not in the second
case, because we never enter the second except: block. For consistency,
maybe instead the semantics be that any name declared for catching an
exception be deleted at the end of the try/except/else/finally clause i.e.
try:
pass
except AttributeError as e1:
pass
except NameError as e2:
pass
is equivalent to:
try:
try:
pass
except AttributeError, e1:
pass
except NameError, e2:
pass
finally:
e1 = None
e2 = None
del e1
del e2
Tim Delaney
_______________________________________________
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