繁体   English   中英

Pytest:about()with>,<,<=和> =

[英]Pytest: approx() with >, <, <=, and >=

所以pytest的文档说明如下:

警告:
在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

使用or代替and __ge____le__变体。

当您将浮点类型数与== !=运算符进行比较时,可以使用approx以避免混淆0.1 + 0.2 != 0.3示例

提供的示例应该被解释为如果用户想要回答的是0.1000000001大于0.1 你期望的答案是True

现在,如果你使用approx它会说False因为0.1000000001 == approx(0.1) (如果你使用__le__它会说True - 这就是为什么他们写的__le__是预期的)

所以使用近似 - 一种模糊数和大于/小于范围是不直观的 - 通常不使用大于约7的问题,如果你需要一个奇怪的模糊范围,你应该明确说明它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM