PyCharm 类型检查器期望类型为“None”,但在使用 pandas dataframe.to_csv 时得到“str”

Mat*_*att 16 python warnings types pycharm pandas

使用PyCharm 2021.2(社区版)和Pandas 1.3.1,代码如下:

import pandas as pd
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
df.to_csv("testfile.csv")
Run Code Online (Sandbox Code Playgroud)

当将鼠标悬停在警告上时,PyCharm 将生成警告,突出显示“testfile.csv”,并显示“预期类型‘无’,改为‘str’”。

testfile.csv 已创建,并且似乎没有发生任何问题。

有没有办法来解决这个问题?有谁知道为什么会出现此警告?

谢谢

Car*_*ate 25

这似乎是 Pycharm 中的一个错误,导致它无法正确解释|;的新运算符typing.Union

如果我ctrl+p在 的参数列表中to_csv,我会得到这个

在此输入图像描述

请注意,它认为参数是类型None(由 指示: None)。

问题是,这是函数的实际签名:

def to_csv(
           self,
           path_or_buf: FilePathOrBuffer[AnyStr] | None = None,
           . . .
Run Code Online (Sandbox Code Playgroud)

参数的类型实际上是FilePathOrBuffer[AnyStr] | None,在 Python 3.10 之前是typing.Union[FilePathOrBuffer[AnyStr], None]typing.Optional[FilePathOrBuffer[AnyStr]]

尽管 Pycharm 声称支持 Python 3.10,但它显然还无法读取花哨的类型提示。


评论中指出,这似乎实际上是pandas“错误”。显然它正在使用|,尽管只声称支持 3.8。

  • 我在 PyCharm 的错误跟踪器 https://youtrack.jetbrains.com/issue/PY-50337 中创建了一张票证。IDE 支持 PEP 604,但此特定示例由于某种原因不起作用。 (9认同)

DV8*_*2XL 7

您可以按如下方式抑制 PyCharm 警告:

# noinspection PyTypeChecker
df.to_csv("testfile.csv")
Run Code Online (Sandbox Code Playgroud)

noinspection您还可以在函数或类的开头添加注释以禁用其中的警告,但请注意不要隐藏其他真正的警告。我更喜欢仅在需要时抑制每条语句。