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

Roel Schroeven roel at roelschroeven.net
Mon Nov 14 04:09:44 EST 2022


Op 14/11/2022 om 4:23 schreef DFS:
> 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
>>>>>
>>> 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.

It's not invalid. In the REPL for example, it does something useful:

 >>> x = [1, 2, 3]
 >>> x.clear
<built-in method clear of list object at 0x000002947DBBF680>

Others have shown instances where writing a method or function without 
calling it are useful in a script too.

There are languages that handle this differently. Ruby, for example, 
calls the function/method even when you don't write the parens, if I'm 
not mistaken. Personally I don't like that; I much prefer Python's 
explicitness in making the difference between the value of a function 
and calling that function. Still, there's something to be said for 
warnings. I agree with others that such warnings are more the job for a 
linter than for the language.

FWIW I've been bitten by this in C++ once. I wanted to write something like

if (some_condition())
     foo();

But I forgot the parens after some_condition, so C++ evaluated the 
function pointer (which was non-NULL so evaluated is true in a boolean 
context) instead of the return value, and therefore foo() got called 
unconditionally.

-- 

"Don't Panic."
         -- Douglas Adams, The Hitchhiker's Guide to the Galaxy



More information about the Python-list mailing list