rlcompleter not calling __getattr__ on [ ]

Fernando Pérez fperez528 at yahoo.com
Thu Apr 18 13:15:18 EDT 2002


Jaco Schieke wrote:

> Being new to interactive python, I have the problem that rlcompleter
> does not seem to be able to resolve the items in a list:
> 
> This works as expected:
> ======================================
>>>> import readline, atexit, rlcompleter
>>>> readline.parse_and_bind('tab: complete')
>>>> a=[[],"",1]
>>>> a.<tab>
> a.append   a.count    a.extend   a.index    a.insert   a.pop
> a.remove   a.reverse  a.sort
> 
> 
> Now is this also supposed to work?
> ==================================
>>>> a[0].<tab>
> .   ..         <---- this is the output I receive
>                      instead of the properties of an []
> 
> 
> 'cause this works:
> ==================================
>>>> b=a[0]
>>>> b.<tab>
> b.append   b.count    b.extend   b.index    b.insert   b.pop
> b.remove   b.reverse  b.sort

I was going to ask the same thing as I'm inclined to think this is a bug: 
readline has '[' and ']' as part of its internal list of word delimiters, so 
when you do 
a[0].<tab>
it breaks the word at ']' and sees a bare '.', hence the completions you get. 
So far so good.

BUT: if you change the list of delimiters (with readline.set_delimiters()) to 
remove '[' and ']', the problem persists. That's the part I think to be a bug 
(I could be wrong, but I'd like to understand why if that's the case). At 
this point it shouldn't break at ']' anymore, and the completion should be 
done on the full 'a[0]'. I put print statements in the rlcompleter code to 
see this and indeed, readline _is_ breaking on ']' even after removing the 
character from the list of delimiters.

Unfortunately the completion code is in C and I don't have the sources around, 
so I haven't had the chance to take a look at this.

I'd love to hear from someone who knows the code as to this behavior really is 
a bug or not before shooting off to SF and looking like an idiot :)

Cheers,

f.



More information about the Python-list mailing list