如何在比较不同类型时强制Python 2引发异常?

时间:2013-10-12 07:26:03

标签: python python-2.7 python-3.x

在Python 2.7.2中将字符串与int进行比较看起来非常不一致:

x = '12'; y = 3
print x > y      # True
x = 12; y = '3'
print x > y      # False

根据 How does Python compare string and int? 在Python 3中,这些将引发异常。有没有办法让Python 2表现得那么好?看__future__我无法弄清楚是否有这样的功能。

2 个答案:

答案 0 :(得分:4)

没有。您的选择是:

  • 编写并使用在不需要的比较中引发的包装类。

  • 编写并使用自定义比较函数代替通常的运算符。

  • 使用像MacroPy这样的东西,使您的自定义比较功能不那么恶劣。

  • 不要依赖这些语义。

  • 比较前预先检查值。

  • 如果需要Python 3,请使用Python 3.

答案 1 :(得分:2)

你不能monkeypatch内置类型(至少不能没有去C源),你也不应该。你只能对它们进行子类化,并让它们在非法比较中引发TypeError

对于Python 2,这是正确的,如果有问题的行为,所以你能做的最好的事情就是切换到Python 3,这在这方面和许多其他方面更为明智。