当 == (等于)运算符用于比较不同类型时,有没有办法获得异常?当尝试对不同类型的对象进行排序时,Python 3 会引发异常。但是 == 仍然返回 False。
还是有其他方法可以避免难以检测由错误类型假设引起的错误?是否有任何设计模式可以提供帮助?
我在想,例如,有人使用别人的 xmlparser.get() 实现,它总是返回一个字符串,即使属性基本上是一个数字。
当 == (等于)运算符用于比较不同类型时,有没有办法获得异常?当尝试对不同类型的对象进行排序时,Python 3 会引发异常。但是 == 仍然返回 False。
还是有其他方法可以避免难以检测由错误类型假设引起的错误?是否有任何设计模式可以提供帮助?
我在想,例如,有人使用别人的 xmlparser.get() 实现,它总是返回一个字符串,即使属性基本上是一个数字。
不,python 本质上是动态类型的。
如果您必须仔细检查类型,请使用isinstance()
function或使用鸭子类型来测试特定行为。
我在想,例如,有人使用别人的 xmlparser.get() 实现,它总是返回一个字符串,即使属性基本上是一个数字。
您可能希望根据需要通过调用int
或对其强制将值转换为数字float
。
不。因为对于 ==,推理是平等意味着可比性。如果两个对象甚至不具有可比性,它们就不相等,因此它将返回 false 并且永远不会抛出异常。
尽管 Python 具有动态类型,但它很强大(不是鸭子)。所以:
>>> 42 == 42
True
>>> 42 == 42.0
True
>>> 42 == "42"
False
>>> 42 == int("42")
True
在获取数字的字符串表示时,您必须执行显式类型转换。
另一方面,您可以通过定义方法__eq__(self, other)
或__cmp__(self, other)
在您的类中管理自定义对象的比较。