2012-07-26 45 views
2

可能重复:
How does Python compare string and int?对整数(Python)的评估串

我作为预期没有评估两个值的Python脚本。值'10'被确定为大于200。问题是保存'10'值的变量实际上是一个字符串而不是一个整数(而200是一个整数)。

我的问题是:

过程是怎样的评估对整数的字符串时,Python的经历?它如何进行比较?

例如:

string="10" 
int=200 
if string >= int: 
    print("String is greater") 
else: 
    print("Int is greater") 

将输出:

String is greater 

这是为什么?当我试图比较这两种类型时,我会认为Python会退出时出现错误。

+0

当它们都是字符串,并且“10”<“200”是真的时更好,但对于错误的原因,这使得当你做“20”<“100”'时,不可能抛出错误并且真的让你感到困惑。故事的道德:知道你的对象是什么类型:) – geoffspear 2012-07-26 17:05:12

回答

5

Python 2.x允许比较任何类型的对象,并保证结果是可重新生成的。在Python 3.x中,比较无法有意义排序的对象会导致错误。 2.x行为的基本原理是,有时可以方便地使用list.sort()异构列表。新的3.x行为的基本原理是旧的行为隐藏了错误。

Python 2.x使用的排序是一个实现细节。 CPython中使用了一些比较奇怪的规则,大致

NoneType <数<老式类,按名称<新式的类排序,按名称

排序(不能保证我得到这个权利,但我不打扰检查它是一个实现细节,不依赖于它)

4

在Python 3中,当您尝试比较字符串和int(或任何2个不可比较的类型)时,确实会得到TypeError

在Python 2中,行为是特定于实现的;在cPython中,类型的名称通常最终会得到比较(尽管您可能不应该依赖此...),所以字符串总是大于整数。

+0

最后一句话并不完全正确。试试'{42} - 这会导致'False',当然''dict'' <“int”'。 – 2012-07-26 16:55:30

+0

@SvenMarnach:编辑来对冲我的赌注。 :) – geoffspear 2012-07-26 16:56:46

2

the docs

运算符<,>,==,> =,< =,和!=比较两个对象的值。这些对象不必具有相同的类型。如果两者都是数字,则它们被转换为通用类型。否则,不同类型的对象总是比较不平等,并且被一致但任意地排序。