PEP 317: Eliminate Implicit Exception Instantiation
Evan Simpson
evan at 4-am.com
Mon Jun 9 13:13:04 EDT 2003
Steven Taschuk wrote:
> Eliminating these forms of ``raise`` makes it impossible to use string
> exceptions; accordingly, this PEP also proposes the formal deprecation
> and eventual elimination of string exceptions.
Rather than eliminating string exceptions, I suggest a new (ab)use and
semantics for them, based on my old "break '<string>', continue
'<string>'" proposal:
1. At compile time, require "raise '<string>'" to be lexically enclosed
by a matching "try: ... except '<string>':".
2. Treat such combinations as though they were a goto/label pair. In
other words, rather than invoking the exception machinery, compile the
"raise" into a jump bytecode.
This would allow for labelled exits from a block of code. Note that
"raise 'foo'" without a matching "except 'foo':' is a SyntaxError, so
this is a very localized, tame goto, and typos in the strings are highly
likely to be caught at compile-time.
Abstracted Example:
try:
m = re.search(<first pattern>)
if m:
if <expression involving m>:
raise 'First case'
if <expression involving m>:
raise 'Second case'
m = re.search(<second pattern>)
if m:
if <expression involving m>:
raise 'First case'
if <expression involving m>:
raise 'Second case'
if <some other test>:
raise 'Second case'
return
except 'First case':
<handle the first case>
except 'Second case':
<handle the second case>
<code common to both cases>
I've both written and encountered code that has this sort of logical
structure, but which had to be written as some variation on:
case = None
m = re.search(<first pattern>)
if m:
if <expression involving m>:
case = 1
elif <expression involving m>:
case = 2
if case is None:
m = re.search(<second pattern>)
if m:
if <expression involving m>:
case = 1
elif <expression involving m>:
case = 2
if case is None and <some other test>:
case = 2
if case is None:
return
if case == 1:
<handle the first case>
else:
<handle the second case>
<code common to both cases>
Cheers,
Evan @ 4-am
More information about the Python-list
mailing list