动态分配变量时,mypy 类型检查显示错误

mypy type checking shows error when a variable gets dynamically allocated

我有一个 class 接受 Spark DataFrame 并对其进行一些处理。这是代码:

    for column in self.sdf.columns:
        if column not in self.__columns:
            row = [column]
            row += '--' * 9
            column_table.append(row)

我的 class:

的构造函数中有这段代码
self.sdf: Optional[SparkDataFrame] = None

这里sdf是在执行我的class时动态设置的,然后上面提到的for循环会运行。 __columns 是一个字典,应该包含 sdf 的所有列。 运行 时我发现代码没有错误。但是当我用 mypy 输入检查我的代码时,它在 for 循环的第一行显示错误:

error: Item "None" of "Optional[Any]" has no attribute "columns"

我了解到最初的 sdf 将是 None。但我应该认为这是一个严重的错误吗?对此有任何解决方法吗?

是的,columns 特定于数据框。您可以找到更多信息 here。当您将 self.sdf 设置为 None 时,您将收到您发布的错误。你也可以试试这个。

    from pyspark.sql import DataFrame

    if self.sdf is not None and isinstance(self.sdf,DataFrame):
        for column in self.sdf.columns:
            if column not in self.__columns:
                row = [column]
                row += '--' * 9
                column_table.append(row)