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

bar*_*ssa 5 pyspark mypy python-3.7

我有一个类,它需要一个Spark DataFrame并对其进行一些处理。这是代码:

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

我在我的类的构造函数中有这个代码:

self.sdf: Optional[SparkDataFrame] = None
Run Code Online (Sandbox Code Playgroud)

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

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

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

kit*_*tes 4

是的,columns特定于数据框。您可以在此处找到更多信息。当您将 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)
Run Code Online (Sandbox Code Playgroud)