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

Pyspark mypy类型检查在动态分配变量时显示错误,pyspark,python-3.7,mypy,Pyspark,Python 3.7,Mypy,我有一个类,它接受一个Spark数据帧,并对其进行一些处理。代码如下: for column in self.sdf.columns: if column not in self.__columns: row = [column] row += '--' * 9 column_table.append(row) 我在类的构造函数中有以下代码: self.sdf: Optional[SparkData

我有一个类,它接受一个
Spark数据帧
,并对其进行一些处理。代码如下:

    for column in self.sdf.columns:
        if column not in self.__columns:
            row = [column]
            row += '--' * 9
            column_table.append(row)
我在类的构造函数中有以下代码:

self.sdf: Optional[SparkDataFrame] = None
这里
sdf
是在我的类执行期间动态设置的,然后上面提到的for循环将运行
\u columns
是一个字典,应该包含sdf的所有列。当代码运行时,我没有发现任何错误。但是当我用
mypy
检查代码时,在for循环的第一行显示了一个错误:

错误:“可选[Any]”中的项目“None”没有属性“columns”


我知道最初sdf将是
None
。但我是否认为这是一个严重的错误?是否有任何解决方法?

是的,
特定于数据帧。您可以找到更多信息。当您将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)

我并不假装理解为什么,但是对于一个自定义类属性,我通过将
self.thing:Optional[OtherClass]=None
更改为
self.thing:OtherClass=None
来阻止mypy给出该错误。啊,我的注释解决方案之所以“有效”,是因为mypy实际上工作不正常。对于那个项目,我需要
mypy——显式包基——命名空间包
。所以我的解决方案实际上不起作用