This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author sdementen
Recipients
Date 2005-04-13.11:02:55
SpamBayes Score
Marked as misclassified
Message-id
In-reply-to
Content
Using builtin exception information is tricky as it 
consists of:
 a) the type of exception (easily accessible)
 b) the args attribute = a 1 element tuple with a string

1st example:

try:
    print foo
except NameError, e:
    print e.args
    symbol = e.args[0][17:-16]
    print symbols
==> 
("NameError: name 'foo' is not defined", )
foo

It would be nicer to have:
e.args = ("NameError: name 'foo' is not defined", "foo")
The first element being the current string for backward 
compatibilty.
=============================

2nd example:

try:
    (4).foo
except NameError, e:
    print e.args
==> ("'int' object has no attribute 'foo'",)

It would be nicer to have:
e.args = ("'int' object has no attribute 'foo'", 4, "foo")
Again, the first element being the current string for 
backward compatibilty.

=============================

Moreover, in the documentation about Exception, I read
"""Warning: Messages to exceptions are not part of the 
Python API. Their 
contents may change from one version of Python to the 
next without warning 
and should not be relied on by code which will run under 
multiple versions 
of the interpreter. """

So even args could not be relied upon !
But it also means that there is no need to be backward 
compatible (I am playing devil's advocate, backward 
compatibility is important !)

Seb

ps: There may be problems (that I am not aware) with
 a) an exception keeping references to other objects
 b) C API that can throw only exceptions with strings
 c) a specific advantage of having strings only in builtin 
exceptions
History
Date User Action Args
2008-01-20 09:59:38adminlinkissue1182143 messages
2008-01-20 09:59:38admincreate