Search code examples
comparisonoperatorspython-2.x

Why does 4 < '3' return True in Python 2?


Why does 4 < '3' return True in Python 2?

Is it because when I place single quotes around a number Python sees it as a string and strings are bigger than numbers?


Solution

  • Yes, any number will be less than any string (including the empty string) in Python 2.

    In Python 3, you can't make arbitrary comparisons. You'll get a TypeError.


    From the link in eryksun's comment:

    if (PyNumber_Check(v))
        vname = "";
    else
        vname = v->ob_type->tp_name;
    if (PyNumber_Check(w))
        wname = "";
    else
        wname = w->ob_type->tp_name;
    c = strcmp(vname, wname);
    

    So at least in recent versions of CPython 2.x, type names are compared, with an empty string used instead of the type name for any numeric type.