gpt4 book ai didi

python-3.x - Mypy + flake8 : Is there any way to surpress warning of `F821 undefined name`

转载 作者:行者123 更新时间:2023-12-03 23:21:32 24 4
gpt4 key购买 nike

在下面的代码中,flake8 说 F821 undefined name 'B' .
但是对于 mypy,输入提示 f是必要的。
flake8 如何忽略此类警告?

def f(b: B) -> None:
pass


class B():
pass

这个例子可以很简单地解决:改变声明的顺序。
但有时我无法在现实情况下更改订单。
这种误导性的警告对我来说很吵。

我的环境:Python 3.6 + flake8 3.6.0 + mypy 0.641 + flake8-mypy 17.8.0

最佳答案

这不是误导性警告和 不应被忽视 ,运行您的代码将导致当前崩溃:

$ python3.8 t.py
Traceback (most recent call last):
File "t.py", line 1, in <module>
def f(b: B) -> None:
NameError: name 'B' is not defined

您有两种选择来解决此问题,一种是显式使用前向声明(通过将类型名括在引号中):
def f(b: 'B') -> None:
pass


class B():
pass

运行:
$ python3.8 t.py
$ flake8 t.py

或使用 from __future__ import annotations (python3.7中的新功能):
from __future__ import annotations


def f(b: B) -> None:
pass


class B():
pass

注意 :我正在使用 flake8 3.7.x,它还改进了前向注释和类型注释的处理

关于python-3.x - Mypy + flake8 : Is there any way to surpress warning of `F821 undefined name` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53605806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com