根据整数评估字符串(Python)

时间:2012-07-26 16:51:23

标签: python string variables integer evaluation

  

可能重复:
  How does Python compare string and int?

我有一个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在尝试比较两种类型时会退出并出错。

3 个答案:

答案 0 :(得分:5)

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

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

  

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

(不能保证我做对了,但我不打算检查。这是一个实现细节,不要依赖它。)

答案 1 :(得分:4)

在Python 3中,在尝试比较字符串和int(或任何2种无法比较的类型)时,你会得到TypeError

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

答案 2 :(得分:2)

来自the docs

  

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