[docs] Python bug.

Lusine Atanesyan atlusine at gmail.com
Fri Nov 28 21:19:18 CET 2014


Hi,

Thanks a lot for the clarification.

Regards,
Lusine Atanesyan

2014-11-27 8:01 GMT+04:00 Zachary Ware <zachary.ware+pydocs at gmail.com>:

> Hi Lusine,
>
> First, I'd like to note that this is not the correct list for
> reporting bugs with Python itself; this list is for discussion of
> Python's documentation.  That being said...
>
> On Wed, Nov 26, 2014 at 1:32 PM, Lusine Atanesyan <atlusine at gmail.com>
> wrote:
> > Hi,
> >
> > I found a pyhton bug. Here is the description:
> >
> > Summary:
> >       It is impossible to change tuple to list.
> >
> > Overview description.
> >       It is impossible to change tuple to list when there is a
> independent
> > list with the "list" name.
> >
> > Steps to reproduce:
> >        >>> list = [1, 2, 3]
> >        >>> tup = (5, 6, 7)
> >        >>> list(tup)
> >
> > Actual result:
> >       The following error is generated:
> >            Traceback (most recent call last):
> >            File "<stdin>", line 1, in <module>
> >            TypeError: 'list' object is not callable
>
> This is the expected result.  By using the name "list" for a list
> object, you are shadowing the built-in name "list", which is the name
> of the list object constructor.  Python's name resolution algorithm
> first checks for a local name, followed by a global name if no local
> is found, followed by a built-in name (a member of the builtins (or
> __builtin__ in Python2) module).  Since executing "list = [1,2,3]"
> creates a local name "list", it is found before the built-in name
> "list"; list objects are not callable, hence the error you got.  Note
> that it doesn't actually matter what you define the local name "list"
> to be:
>
> >>> list = "this is not a list"
> >>> tup = (4,5,6)
> >>> list(tup)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: 'str' object is not callable
>
> > Expect result:
> >       Either it should be possible to change the tuple to list or the
> error
> > should generated when creating a list with the "list" name.
>
> Name shadowing can be a very useful feature, allowing things like (in
> Python 3) redefining the name "print" to be a wrapper around
> "log.debug", so it's not going away.  The real solution here is to
> either just not use the name "list" in a local scope (a lot of people
> use "lst" or "list_" or just "l" if your font distinguishes between
> "l" and "I" properly), or to import builtins (or __builtin__ in Python
> 2) and use "builtins.list" instead of just "list" when you need the
> built-in list.  It's also possible to do something extraordinarily
> ugly like "type([])(tup)", but that's just going a little too far :)
>
> Hope this helps,
> --
> Zach
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/docs/attachments/20141129/67190121/attachment.html>


More information about the docs mailing list