我有这个简单的python程序。我运行它并打印yes
,实际上我希望它不会打印任何内容,因为14
不大于14
。
我看到了related这个问题,但它并没有太大帮助。
#! /usr/bin/python
import sys
hours = "14"
if (hours > 14):
print "yes"
我做错了什么?
答案 0 :(得分:25)
将字符串转换为int
的整数:
hours = int("14")
if (hours > 14):
print "yes"
在CPython2中,当比较两个不同类型的非数字对象时,通过比较类型的名称来执行比较。由于'int' < 'string'
,任何int都小于任何字符串。
In [79]: "14" > 14
Out[79]: True
In [80]: 14 > 14
Out[80]: False
这是一个经典的Python陷阱。在Python3中,这个疣已得到纠正 - 比较不同类型的非数字对象默认会引发TypeError。
CPython实现细节:除了以外的不同类型的对象 数字按其类型名称排序;相同类型的对象 不支持正确比较的,按其地址排序。