[Python-Dev] Re-raise in absence of an "active" exception

Phillip J. Eby pje at telecommunity.com
Sat Jun 26 11:14:07 EDT 2004


At 02:20 PM 6/26/04 +0200, Martin v. Löwis wrote:
>Phillip J. Eby wrote:
>>> >>> try:
>>>..   1/0
>>>.. except:
>>>..   pass
>>>..
>>> >>> raise
>>>Traceback (most recent call last):
>>>   File "<stdin>", line 1, in ?
>>>TypeError: exceptions must be classes, instances, or strings 
>>>(deprecated), not NoneType
>>>
>>>Here, the re-raise doesn't find an exception anymore, even
>>>though non has been raised...
>>
>>Isn't each statement/block in the interactive interpreter run in a new frame?
>
>Yes, but why does that matter? If the language spec says
>"the exception stays until the next exception is raised", then
>the interpreter doesn't conform to the language spec, and has
>a bug.

I thought the spec was that exceptions are active for the life of a frame's 
execution.  That's probably my projection of the implementation onto an 
ambiguous phrase in the spec, though.

Nonetheless, I think that the ambiguity can and should be resolved by 
defining "active in the current scope" to mean, "caught by an exception 
handler in the current frame or one of its parents".  This explanation 
should probably be added to the section on "Exceptions", and 
cross-referenced from the section on "raise".

Is there consensus such that I should make these changes to the spec?




More information about the Python-Dev mailing list