首页 > 解决方案 > Python 打字 - 为什么我可以将一个可选的 Pandas DataFrame 分配给一个非可选的 Pandas DataFrame

问题描述

为什么以下代码不会引发 mypy 错误?

from typing import Optional

import pandas as pd

data = {'col1': [1, 2], 'col2': [3, 4]}
optional_df: Optional[pd.DataFrame] = pd.DataFrame(data=data)
df: pd.DataFrame = optional_df 

在同一个文件中,我有这段代码:

optional_string: Optional[str] = "baz"
string: str = optional_string

错误:

foo.py:11: error: Incompatible types in assignment (expression has type "Optional[str]", variable has type "str")
Found 1 error in 1 file (checked 109 source files)

我正在像这样启动 mypy:

mypy --config-file ../quality_checks/mypy.ini .

我的配置文件如下所示:

[mypy]
python_version = 3.7
strict = True

[mypy-pandas]
ignore_missing_imports = True

我认为 ignore_missing_imports 可能是这里的问题,但我不确定这是否是真的或者为什么它是真的。

标签: pythonpandasmypy

解决方案


pandas 没有(但是,虽然这可能会在不久之后改变)暴露类型提示 - 如果你运行

import pandas as pd

df: pd.DataFrame
reveal_type(df)

那么你应该看到它是 revelead as Any,这意味着它不会被类型检查。


推荐阅读