[Python-Dev] A few small issues

Ka-Ping Yee ping@lfw.org
Tue, 27 Feb 2001 03:53:08 -0800 (PST)


Hi.  Here are some things i noticed tonight.


1.  The error message for UnboundLocalError isn't really accurate.

    >>> def f():
    ...     x = 1
    ...     del x
    ...     print x
    ... 
    >>> f()
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
      File "<stdin>", line 4, in f
    UnboundLocalError: local variable 'x' referenced before assignment
    >>> 

    It's not a question of the variable being referenced "before
    assignment" -- it's just that the variable is undefined.  Better
    would be a straightforward message such as

        UnboundLocalError: local name 'x' is not defined

    This message would be consistent with the others:

        NameError: name 'x' is not defined
        NameError: global name 'x' is not defined


2.  Why does imp.find_module('') succeed?

    >>> import imp
    >>> imp.find_module('')
    (None, '/home/ping/python/', ('', '', 5))

    I think it should fail with "empty module name" or something similar.


3.  Normally when a script is run, it looks like '' gets prepended to
    sys.path so that the current directory will be searched.  But if
    the script being run is a symlink, the symlink is resolved first to
    an actual file, and the directory containing that file is prepended
    to sys.path.  This leads to strange behaviour:

    localhost[1004]% cat > spam.py
    bacon = 5
    localhost[1005]% cat > /tmp/eggs.py
    import spam
    localhost[1006]% ln -s /tmp/eggs.py .
    localhost[1007]% python eggs.py
    Traceback (most recent call last):
      File "eggs.py", line 1, in ?
        import spam
    ImportError: No module named spam
    localhost[1008]% python
    Python 2.1a2 (#23, Feb 11 2001, 16:26:17) 
    [GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2
    Type "copyright", "credits" or "license" for more information.
    >>> import spam
    >>> 

    (whereupon the confused programmer says, "Huh?  If *i* could
    import spam, why couldn't eggs?").  Was this a design decision?
    Should it be changed to always prepend ''?


4.  As far as i can tell, the curses.wrapper package is inaccessible.
    It's obscured by a curses.wrapper() function in the curses package.

    >>> import curses.wrapper
    >>> curses.wrapper
    <function wrapper at 0x80ebe14>
    >>> import sys
    >>> sys.modules['curses.wrapper']
    <module 'curses.wrapper' from '/home/ping/dev/python/dist/src/Lib/curses/wrapper.pyc'>

    I don't see any way around this other than renaming curses.wrapper.


-- ?!ng

"If I have not seen as far as others, it is because giants were standing
on my shoulders."
    -- Hal Abelson