如何干净地测试 Mypy 中对象的相等性而不产生错误?

Dan*_*Dan 9 python mypy python-typing

我有以下功能:

import pandas as pd

def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
    return left == right
Run Code Online (Sandbox Code Playgroud)

当我通过 Mypy 运行它时,出现以下错误:

错误:从声明为返回“bool”的函数返回任何内容

我相信这是因为 Mypy 不知道pd.Timestamp所以将其视为Any. (使用 Mypyreveal_type函数表明 Mypy 将leftright视为Any。)

处理这个问题以阻止 Mypy 抱怨的正确方法是什么?

Oll*_*PGH 6

你可以将其转换为布尔值。

import pandas as pd

def eq(left: pd.Timestamp, right: pd.Timestamp) -> bool:
    return bool(left == right)
Run Code Online (Sandbox Code Playgroud)

如果 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)
Run Code Online (Sandbox Code Playgroud)