【问题标题】:PyCharm type checker expected type 'None', got 'str' instead when using pandas dataframe.to_csvPyCharm 类型检查器预期类型为“无”,使用 pandas dataframe.to_csv 时改为“str”
【发布时间】:2021-10-17 14:45:02
【问题描述】:

使用 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")

PyCharm 将产生一个警告,突出显示“testfile.csv”,并在悬停在警告上时显示“预期类型 'None',得到 'str'”。

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

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

谢谢

【问题讨论】:

    标签: python pandas types pycharm warnings


    【解决方案1】:

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

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

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

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

    def to_csv(
               self,
               path_or_buf: FilePathOrBuffer[AnyStr] | None = None,
               . . .
    

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

    Pycharm 显然还不能读取花哨的类型提示,尽管它说它支持 Python 3.10。

    【讨论】:

    • 感谢您提供此信息。我还应该包括我也在使用 Python 3.9。
    • 啊,明白了。再次感谢!
    • 我在 PyCharm 的错误跟踪器 youtrack.jetbrains.com/issue/PY-50337 中创建了一张票。 IDE 支持 PEP 604,但此特定示例由于某种原因不起作用。
    【解决方案2】:

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

    # noinspection PyTypeChecker
    df.to_csv("testfile.csv")
    

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

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 2014-07-20
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2018-09-23
      • 2021-07-14
      相关资源
      最近更新 更多