# type: ignore[attr-defined]
之外,还有什么方法可以避免类型检查器错误?示例来自官方文档
https://docs.pola.rs/py-polars/html/reference/api.html :
文件checker.py
:
import polars as pl
@pl.api.register_expr_namespace("greetings")
class Greetings:
def __init__(self, expr: pl.Expr):
self._expr = expr
def hello(self) -> pl.Expr:
return (pl.lit("Hello ") + self._expr).alias("hi there")
def goodbye(self) -> pl.Expr:
return (pl.lit("Sayōnara ") + self._expr).alias("bye")
print(pl.DataFrame(data=["world", "world!", "world!!"]).select(
[
pl.all().greetings.hello(), # type: ignore[attr-defined]
pl.all().greetings.goodbye(),
]
))
% mypy checker.py
checker.py:19: error: "Expr" has no attribute "greetings" [attr-defined]
Found 1 error in 1 file (checked 1 source file
% mypy --version
mypy 1.8.0 (compiled: yes)
% pyright checker.py
/path/to/checker.py
/apth/to/checker.py:19:18 - error: Cannot access member "greetings" for type "Expr"
Member "greetings" is unknown (reportGeneralTypeIssues)
1 error, 0 warnings, 0 informations
% pyright --version
pyright 1.1.343
# type: ignore[attr-defined]
抑制。
mypy
和
pyright
这样的静态类型检查器往往不太适合动态创建属性。如果有很多错误需要抑制,您可以在文件顶部附近添加注释,以抑制对整个文件的特定检查。以下是
mypy
的操作方法:
# mypy: disable-error-code="attr-defined"
import polars as pl
...
这是如何做到这一点的pyright
:
# pyright: reportGeneralTypeIssues=false
import polars as pl
...
通常,处理此问题的方法是为自定义 __getattr__
和
__setattr__
dunder 方法添加类型提示。 (有关更多详细信息,请参阅this问题)。然而,由于此更改需要修改 Polars 代码,因此最好的解决方案是简单地抑制错误。