在 init 方法中将变量分配为 None 时抑制 PyCharm 警告

Nag*_*S N 2 python autocomplete pycharm

我正在使用 PyCharm 进行 python 编码。在一个类中,我有几个字段,在实例化类时不会传递其值,而是稍后设置。因此,在__init__()方法中,我将它们的值设置为None. 此外,为了利用 PyCharm 自动代码完成,我指定了这些字段的数据类型。

class SelectFrame():
    index_data: pandas.DataFrame
    index_filepath: Path

    def __init__(self):
        self.index_data = None
        self.index_filepath = None
Run Code Online (Sandbox Code Playgroud)

但是有了这个,PyCharm 发出了警告Expected Type 'DataFrame', got 'None' instead。如何消除此警告?

注意:我不想完全取消 TypeChecker 警告,也不想# noinspection PyTypeChecker在我使用此类代码的任何地方放置注释。我的问题是
None 初始化是否正确?或者有没有更好的方法来初始化和避免警告?

Lio*_*hen 6

None 初始化是正确的(除非您在构造过程中知道它),但是您将 index_data 声明为 pandas.DataFrame 并且None 不是 pandas.DataFrame所以它会警告您。

您应该通过使用Optional来增强类型声明以包括 None 。

from typing import Optional

class SelectFrame():
    index_data: Optional[pandas.DataFrame]
    index_filepath: Optional[Path]

    def __init__(self):
        self.index_data = None
        self.index_filepath = None
Run Code Online (Sandbox Code Playgroud)

  • PyCharm 是否具有与 MyPy --no-strict-Optional 设置等效的设置?我发现必须在任何地方使用“Optional”真的很烦人,并且宁愿 PyCharm 始终将“None”视为在每种情况下都有效。你知道是否有一个埋藏在我没见过的深处的设置,或者一些不涉及禁用类型检查器检查或到处使用 # `noinspection PyTypeChecker` 的解决方法? (2认同)