[Python-Dev] Exception __name__ missing?

Georg Brandl g.brandl at gmx.net
Tue Jan 18 08:14:15 CET 2011


Am 18.01.2011 03:41, schrieb Ron Adam:
> 
> 
> On 01/17/2011 02:27 PM, Georg Brandl wrote:
>> Am 17.01.2011 21:22, schrieb Ron Adam:
>>>
>>> Is this on purpose?
>>>
>>>
>>> Python 3.2rc1 (py3k:88040, Jan 15 2011, 18:11:39)
>>> [GCC 4.4.5] on linux2
>>> Type "help", "copyright", "credits" or "license" for more information.
>>>   >>>  Exception.__name__
>>> 'Exception'
>>>   >>>  e = Exception('has no name')
>>>   >>>  e.__name__
>>> Traceback (most recent call last):
>>>     File "<stdin>", line 1, in<module>
>>> AttributeError: 'Exception' object has no attribute '__name__'
>>
>> It's not on purpose in the sense that it's not something special
>> to exceptions.  The class __name__ attribute is not accessible
>> from instances of any class.
> 
> Yes, I realised this on the way to an appointment.  Oh well. ;-)
> 
> 
> What I needed was e.__class__.__name__ instead of e.__name__.
> 
> I should have thought about this a little more before posting.
> 
> 
> 
> The particular reason I wanted it was to format a nice message for 
> displaying in pydoc browser mode.   The server errors, like a missing .css 
> file, and any other server related errors, go the server console, while the 
> content errors get displayed in a web page.  ie... object not found, or 
> some other content related reason for not giving what was asked for.
> 
> Doing repr(e) was giving me too much.
> 
>      UnicodeDecodeError('utf8', b'\x7fELF\x02\x01\x01\x00\x00\x00\x ....
> 
> With pages of bytes, and I'd rather not truncate it, although that would be ok.
> 
> str(e) was more useful, but didn't include the exception name.
> 
>      'utf8' codec can't decode byte 0xe0 in position 24: invalid 
> continuation byte

For these cases, you can use traceback.format_exception_only().

Georg



More information about the Python-Dev mailing list