On Tue, Jan 18, 2011 at 7:09 AM, Scott Dial <scott+python-dev at scottdial.com> wrote: > I worked around the issue by referencing the __class__ (as the other > replier mentioned). But, I didn't receive any responses then, so I think > not a lot of attention was put into these type of attributes on exceptions. That's not a workaround, it is the way you're meant to access __module__ and __name__ on new-style classes (which was the transition that happened for Exception in 2.5). The fact that user-defined classes get a __module__ attribute on instances while builtin and extension types don't isn't unique to exceptions though: >>> class C: pass ... >>> C.__module__ '__main__' >>> C().__module__ '__main__' >>> str.__module__ 'builtins' >>> str().__module__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'str' object has no attribute '__module__' >>> import datetime >>> datetime.datetime.__module__ 'datetime' >>> datetime.datetime.now().__module__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'datetime.datetime' object has no attribute '__module__' The addition of __module__ to user defined class instances strikes me as a bug. You can see in the language reference [1] that __dict__ and __class__ are the only expected data attributes for class instances. [1] http://docs.python.org/dev/reference/datamodel.html (search for the entry on "class instances", then scroll back up and contrast with the sections on class objects, functions and methods) Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4