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——显式包基——命名空间包
。所以我的解决方案实际上不起作用