Two Conflicting Meanings Of Builtins In Python 3 (python 3.1, Python 3k, Python3000)
I just posted below query to comp.lang.python, but i feel this kind of question has some kind of right-of-way here on Stack Overflow, too, so be it repeated. the essence: why does
Solution 1:
getattr(__builtins__, '__dict__', __builtins__)
should give you the dict that you want to update to "export names to the global namespace", whether __builtins__
is a dict (then it doesn't have a __dict__
attribute so getattr
returns the third argument, which is the dict __builtins__
itself) or a module (then it does have that attribute and getattr
returns it). This is the workaround. As to why Python's documented to work in a way requiring such a tangled workaround, I'd classify it as an unfortunate case of an implementation issue surfacing to user-visible (and indeed documented) level (sigh). Pity we didn't think of fixing it in the move to Python 3, but it's too late to make backwards-incompatible changes now:-(.
Post a Comment for "Two Conflicting Meanings Of Builtins In Python 3 (python 3.1, Python 3k, Python3000)"