2

可能重复:
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 在尝试比较这两种类型时会出错并退出。

4

3 回答 3

5

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

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

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

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

于 2012-07-26T16:54:45.643 回答
4

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

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

于 2012-07-26T16:54:06.847 回答
2

文档

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

于 2012-07-26T16:54:39.173 回答