[Python-Dev] Deprecating string exceptions

Guido van Rossum guido@python.org
Thu, 28 Mar 2002 00:50:01 -0500


> >>>>> "SM" == Skip Montanaro <skip@pobox.com> writes:
> 
>     SM> Taking a quick peek at my own code, the only place I see that
>     SM> strings are raised is in code that works with ZServer
>     SM> (e.g. "raise 'redirect'").
> ---------------^^^^^^^^^^^^^^^
> 
> That's kind of scary Skip!  I.e. I belive the following is /not/
> guaranteed to work in any version of Python that I'm aware of:
> 
>     try:
> 	raise 'foo'
>     except 'foo':
> 	print 'foo caught'
> 
> because 'foo' is not (necessarily) 'foo'.
> 
> Much better to use:
> 
>     FOOEXC = 'foo'
>     try:
> 	raise FOOEXC
>     except FOOEXC:
> 	print 'foo caught'
> 
> -Barry

Barry, he's doing what Zope tells him to do -- AFAIK Zope doesn't make
identifiers available for these magic exceptions.  It happens to work
because string literals that look like identifiers are always
intern()ed -- but the language doesn't guarantee this!

--Guido van Rossum (home page: http://www.python.org/~guido/)