PyWart: Language missing maximum constant of numeric types!

Steven D'Aprano steve+comp.lang.python at
Sun Feb 26 14:19:23 CET 2012

On Sun, 26 Feb 2012 12:56:46 +0100, Wolfgang Meiners wrote:

> That means:
> if maxlength and (len(string) <= maxlength):
> is equivalent to
> if (maxlength is not None) and (len(string) <= maxlength):
> which is more complicated to type and -in my opinion- not so intuitive.
> But because it is equivalent, it is a matter of taste, what to use.

Incorrect. The two are *not* equivalent.

def test(maxlength, string):
    flag1 = maxlength and (len(string) <= maxlength)
    flag2 = (maxlength is not None) and (len(string) <= maxlength)
    return bool(flag1), bool(flag2)  # normalise to booleans

>>> test(0, '')
(False, True)

So the two forms will take opposite branches of the if statement when 
maxlength is 0 and string is the empty string.


More information about the Python-list mailing list