In code, list.clear doesn't throw error - it's just ignored

DFS nospam at dfs.com
Sun Nov 13 22:23:09 EST 2022


On 11/13/2022 9:11 PM, Chris Angelico wrote:
> On Mon, 14 Nov 2022 at 11:53, DFS <nospam at dfs.com> wrote:
>>
>> On 11/13/2022 5:20 PM, Jon Ribbens wrote:
>>> On 2022-11-13, DFS <nospam at dfs.com> wrote:
>>>> In code, list.clear is just ignored.
>>>> At the terminal, list.clear shows
>>>> <built-in method clear of list object at 0x000001C9CFEC4240>
>>>>
>>>>
>>>> in code:
>>>> x = [1,2,3]
>>>> x.clear
>>>> print(len(x))
>>>> 3
>>>>
>>>> at terminal:
>>>> x = [1,2,3]
>>>> x.clear
>>>> <built-in method clear of list object at 0x000001C9CFEC4240>
>>>> print(len(x))
>>>> 3
>>>>
>>>>
>>>> Caused me an hour of frustration before I noticed list.clear() was what
>>>> I needed.
>>>>
>>>> x = [1,2,3]
>>>> x.clear()
>>>> print(len(x))
>>>> 0
>>>
>>> If you want to catch this sort of mistake automatically then you need
>>> a linter such as pylint:
>>>
>>>     $ cat test.py
>>>     """Create an array and print its length"""
>>>
>>>     array = [1, 2, 3]
>>>     array.clear
>>>     print(len(array))
>>>     $ pylint -s n test.py
>>>     ************* Module test
>>>     test.py:4:0: W0104: Statement seems to have no effect (pointless-statement)
>>
>>
>> Thanks, I should use linters more often.
>>
>> But why is it allowed in the first place?
>>
>> I stared at list.clear and surrounding code a dozen times and said
>> "Looks right!  Why isn't it clearing the list?!?!"
>>
>> 2 parens later and I'm golden!
>>
> 
> No part of it is invalid, so nothing causes a problem. For instance,
> you can write this:


If it wastes time like that it's invalid.

This is an easy check for the interpreter to make.

If I submit a suggestion to python-list at python.org will it just show up 
here?  Or do the actual Python devs intercept it?






>>>> 1
> 
> And you can write this:
> 
>>>> 1 + 2
> 
> And you can write this:
> 
>>>> print(1 + 2)
> 
> But only one of those is useful in a script. Should the other two be
> errors? No. But linters WILL usually catch them, so if you have a good
> linter (especially built into your editor), you can notice these
> things.


ran pylint against it and got 0.0/10.


--disable=
invalid-name
multiple-statements
bad-indentation
line-too-long
trailing-whitespace
missing-module-docstring
missing-function-docstring
too-many-lines
fixme


and got 8.9/10.



More information about the Python-list mailing list