Heisenberg strikes again!

neeson google at elesi.org
Wed Sep 10 16:54:10 EDT 2003


Alright, I'm fairly new to Python, and this one has got me stumped. 
I've just started to write a cli program that'll use readline, and
I've attached the relevant bits.

Here's the mystery:  If I so much as /look/ at the list 'matches',
readline stops working.  Run the program, hit tab at the prompt,
you'll get 'one', which is incorrect, as there are in fact four
possible completions.  Now comment out the line that I've marked
(which, incidentally, does nothing).  /Now/ it works.

Is there some very strange side effect to accessing a list element
that I'm unaware of?  I've tried it in two different versions of
Python.

Any elightenment would be appreciated...

Heath

ps In terms of being useful, this program doesn't make any sense.  I'm
not trying to get it to work, I'm looking to understand why the
commented line affects the rest of the code.


#!/usr/bin/python

import readline
import sys

commands = ["one", "two", "three", "four"]
matches = []

def comp(text, state):
    if state == 0:
        matches = []
        n = len(text)
        for cmd in commands:
            if cmd[:n] == text:
                matches.append(cmd)
    throwaway = matches[0]   # <--- Comment out this line
    return commands[state]

readline.set_completer(comp)
readline.parse_and_bind("tab: complete")

while 1:
    try:
        line = raw_input("> ")
    except EOFError:
        print "\n",
        sys.exit()
    print ": %s" % line




More information about the Python-list mailing list