Proposal: add sys to __builtins__

Paul Watson pwatson at redlinepy.com
Fri Sep 2 16:40:02 EDT 2005


Steve Holden wrote:
> Rick Wotnaz wrote:
> 
>> Michael Hoffman <cam.ac.uk at mh391.invalid> wrote in
>> news:df7jlu$1te$1 at gemini.csx.cam.ac.uk:
>>
>>> What would people think about adding sys to __builtins__ so that
>>> "import sys" is no longer necessary? This is something I must
>>> add to every script I write that's not a one-liner since they
>>> have this idiom at the bottom:
>>>
>>> if __name__ == "__main__":
>>>     sys.exit(main(sys.argv[1:]))
>>>
>>> Additionally, the necessity of "import sys" makes some
>>> one-liners a little more unwieldy than they should be--it is
>>> surely the module I am missing the most in one-liners. For
>>> example, with this proposal, this inelegant one-liner:
>>>
>>> $ python -c "import sys; print
>>> ''.join(sorted(sys.stdin.readlines()))"
>>> could be replaced by:
>>>
>>> $ python -c "print ''.join(sorted(sys.stdin.readlines()))"
>>>
>>> Since sys is surely the most commonly used module (it is
>>> imported in 108 of 188 Python 2.4 stdlib modules on my system,
>>> and certainly more than any other module), I would hope few
>>> people would be affected by a namespace collision.
>>>
>>> Other languages (e.g. C#) always make their system namespace
>>> available without needing a special import.
>>>
>>> In short, given the wide use of sys, its unambiguous nature, and
>>> the fact that it really is built-in already, although not
>>> exposed as such, I think we would be better off if sys were
>>> always allowed even without an import statement.
>>
>>
>>
>> +1 here. As far as I'm concerned, both os and sys could be special-
>> cased that way. That said, I would guess the likelihood of that 
>> happening is 0.
> 
> I wonder if it would be worth special-casing the AttributeError 
> exception handling at the outermost lexical scope to try and import a 
> module with the troublesome name and then retrying the attribute access 
> if the import succeeded (possibly even from a path limited to the 
> standard locations).
> 
> That way none of the standard library modules would need to be imported 
> before use.
> 
> I can see that this would create problems as well as solving some, but 
> it would be nice not to have to import the standard library modules. I 
> don't personally find it a hardship, but some people do.
> 
> though-i-could-just-be-raving-ly y'rs  - steve

This sounds pretty interesting.  How about a switch to invoke this 
handling for the one-liner crowd and those who wish to use it?

Somehow, I never heard any C programmers suggest that the default 
processing not include the need for:

#include <stdio.h>



More information about the Python-list mailing list