How to compare string and integer in python?

I have this simple python program. I ran it and it prints yes, when in fact I expect it to not print anything because 14 is not greater than 14.

I saw this related question, but it isn't very helpful.

#! /usr/bin/python

import sys

hours = "14"

if (hours > 14):
        print "yes"

What am I doing wrong?


Convert the string to an integer with int:

hours = int("14")

if (hours > 14):
        print "yes"

In CPython2, when comparing two non-numerical objects of different types, the comparison is performed by comparing the names of the types. Since 'int' < 'string', any int is less than any string.

In [79]: "14" > 14
Out[79]: True

In [80]: 14 > 14
Out[80]: False

This is a classic Python pitfall. In Python3 this wart has been corrected -- comparing non-numerical objects of different type raises a TypeError by default.

As explained in the docs:

CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.


I think the best way is to convert hours to an integer, by using int(hours) .

hours = "14"

if int(hours) > 14:
    print("yes")```