Pytest:带有(>,<,<=和> =

时间:2019-01-11 13:38:30

标签: python pytest

因此the documentation for pytest states以下内容:

  

警告:
  在3.2版中进行了更改。

     

为了避免不一致的行为,对>>=<<=进行比较会引发TypeError。下面的示例说明了该问题:

     
assert approx(0.1) > 0.1 + 1e-10  # calls approx(0.1).__gt__(0.1 + 1e-10)
assert 0.1 + 1e-10 > approx(0.1)  # calls approx(0.1).__lt__(0.1 + 1e-10)
     

在第二个示例中,人们希望调用approx(0.1).__le__(0.1 + 1e-10)。但是,approx(0.1).__lt__(0.1 + 1e-10)用于比较。这是因为丰富比较的调用层次结构遵循固定的行为。

现在我不知道自己是否很蠢,但是为什么在第二个示例中会期望__le__?我绝对不会我希望__lt__

我不知道这是什么试图诚实地陈述。而且我不明白为什么函数不能像这样:

def __gt__(self, actual):
    return actual > self.expected and other != self

def __lt__(self, actual):
    return actual < self.expected and other != self

使用__ge__而不是__le__的{​​{1}}和or变体。

1 个答案:

答案 0 :(得分:0)

approx用于将浮点类型数字与== !=运算符进行比较,以避免混淆0.1 + 0.2 != 0.3

的示例。

所提供的示例应被解释为类似于用户想要回答的情况 0.10000000010.1大吗?您期望的答案是True

现在,如果您使用approx,它将自False起说0.1000000001 == approx(0.1)(如果您使用__le__,它将说True-这就是为什么他们写了{应该是{1}})

因此,使用近似值-一种模糊数且大于/小于范围是不直观的-通常不使用X大于约7之类的问题,如果需要更宽泛的模糊范围,则应明确声明