如何在不产生错误的情况下干净地测试 Mypy 中对象的相等性?
How do I cleanly test equality of objects in Mypy without producing errors?
我有以下功能:
import pandas as pd
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
return left == right
当我通过 Mypy 运行 时出现以下错误:
error: Returning Any from function declared to return "bool"
我认为这是因为 Mypy 不了解 pd.Timestamp
,所以将其视为 Any
。 (使用 Mypy reveal_type
函数表明 Mypy 将 left
和 right
视为 Any
。)
处理此问题以阻止 Mypy 抱怨的正确方法是什么?
您可以将其转换为布尔值。
import pandas as pd
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
return bool(left == right)
如果 mypy 不喜欢,您可以从输入中导入 cast
并使用它来将其转换为布尔值。
import pandas as pd
from typing import cast
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
result = bool(left == right)
return cast(bool, result)
我也在不使用cast
命令的情况下进行了测试。 Mypy 检查无误通过,代码如下:
import pandas as pd
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
return bool(left == right)
(使用 Mypy 0910 测试。)
我有以下功能:
import pandas as pd
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
return left == right
当我通过 Mypy 运行 时出现以下错误:
error: Returning Any from function declared to return "bool"
我认为这是因为 Mypy 不了解 pd.Timestamp
,所以将其视为 Any
。 (使用 Mypy reveal_type
函数表明 Mypy 将 left
和 right
视为 Any
。)
处理此问题以阻止 Mypy 抱怨的正确方法是什么?
您可以将其转换为布尔值。
import pandas as pd
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
return bool(left == right)
如果 mypy 不喜欢,您可以从输入中导入 cast
并使用它来将其转换为布尔值。
import pandas as pd
from typing import cast
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
result = bool(left == right)
return cast(bool, result)
我也在不使用cast
命令的情况下进行了测试。 Mypy 检查无误通过,代码如下:
import pandas as pd
def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
return bool(left == right)
(使用 Mypy 0910 测试。)