2

当 == (等于)运算符用于比较不同类型时,有没有办法获得异常?当尝试对不同类型的对象进行排序时,Python 3 会引发异常。但是 == 仍然返回 False。

还是有其他方法可以避免难以检测由错误类型假设引起的错误?是否有任何设计模式可以提供帮助?

我在想,例如,有人使用别人的 xmlparser.get() 实现,它总是返回一个字符串,即使属性基本上是一个数字。

4

4 回答 4

2

不,python 本质上是动态类型的。

如果您必须仔细检查类型,请使用isinstance()function或使用鸭子类型来测试特定行为。

于 2012-10-10T09:16:28.337 回答
2

我在想,例如,有人使用别人的 xmlparser.get() 实现,它总是返回一个字符串,即使属性基本上是一个数字。

您可能希望根据需要通过调用int或对其强制将值转换为数字float

于 2012-10-10T09:18:32.753 回答
2

不。因为对于 ==,推理是平等意味着可比性。如果两个对象甚至不具有可比性,它们就不相等,因此它将返回 false 并且永远不会抛出异常。

于 2012-10-10T09:19:04.680 回答
2

尽管 Python 具有动态类型,但它很强大(不是鸭子)。所以:

>>> 42 == 42
True
>>> 42 == 42.0
True
>>> 42 == "42"
False
>>> 42 == int("42")
True

在获取数字的字符串表示时,您必须执行显式类型转换。

另一方面,您可以通过定义方法__eq__(self, other)__cmp__(self, other)在您的类中管理自定义对象的比较。

于 2012-10-10T09:20:13.067 回答