[Tutor] beginning to code

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Sep 19 05:28:40 EDT 2017


On Tue, 19 Sep 2017 09:22:21 +0200, Antoon Pardon wrote:

> But the problem is that the following two pieces of code don't do the
> same in Python.
> 
> if x: pass 
> if x is True: pass
> 
> Sometimes I need that second statement 

"Need" is a funny thing. If all you are doing is testing the truthiness 
of x, which is what it looks like to me, why do you care that it is a 
bool, rather than an int 1 or a float or any other object?

You probably don't insist that your lists are *actual* lists, any list-
like object with the right interface will do. You probably don't insist 
that your iterators are *actual* IteratorType objects, which is good 
because there's no such thing and iterators come in many different types, 
all quacking and swimming the same.

So why insist on True and False alone? That's a code smell.

But okay, I'll give you the benefit of the doubt and assume you have a 
good reason. Okay, that's easy to fix:


# We require actual True here, not just a truthy value.
if x is True: pass


If anyone insists on questioning this, you can just say "Yes, I hear you, 
but I have reasons, and you would need to understand our entire project 
to understand them, so just trust me."

And the problem is solved.


-- 
Steven D'Aprano
“You are deluded if you think software engineers who can't write 
operating systems or applications without security holes, can write 
virtualization layers without security holes.” —Theo de Raadt



More information about the Python-list mailing list