簡體   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