在 Python 3.8 中声明一个常量变量触发 "Module 'typing' has no attribute 'Final'" error/warning (Python 3.8, Thonny IDE)

Declaring a constant variable in Python 3.8 triggers "Module 'typing' has no attribute 'Final'" error/warning (Python 3.8, Thonny IDE)

我正在尝试使用以下代码在 Python 3.8 中声明常量:

from typing import Final

这是 Python 3.8 中的一项新功能。有关详细信息,请参阅 https://docs.python.org/3/library/typing.html。 Thonny IDE 的捆绑解释器 (3.7) 给出了 error:

Traceback (most recent call last): File ".../decimal_arithmetics.py", line 2, in from typing import Final ImportError: cannot import name 'Final' from 'typing' (/Applications/Thonny.app/Contents/Frameworks/Python.framework/Versions/3.7/lib/python3.7/typing.py)

可以理解,虽然是3.8版本的新特性,Thonny还在用3.7版本。

但是,随着解释器的首选项更改为单独安装的 Python 3.8,我仍然有一个 IDE 警告

Line 2 : Module 'typing' has no attribute 'Final'

出现此警告的原因是什么?

如果需要其他信息来澄清问题,请告诉我。

说明

Thonny 的助手使用 Pylint 和 Mypy 来提供警告。 Pylint 主要用于检查代码是否使用了正确的 Python 编码标准 (PEP8),而 Mypy 用于检查 Python 的静态类型。在这种情况下,警告 "Module 'typing' has no attribute 'Final'" 来自 Mypy。

现在,当 Final 确实存在于您的解释器的 typing 中时,为什么 Mypy 会显示该警告?它显示警告是因为它没有检查您的解释器的 typing.py,而是检查 Thonny 解释器的 typing.py。将其设置为使用自己的解释器而不是 Thonny 的解释器并不重要,助手始终会像使用 Thonny 的解释器一样检查您的代码。

解决方案

有几种方法可以阻止警告的出现:

  1. 您可以将 Thonny 解释器的 typing.py 替换为您的解释器的 typing.py,但是这是有风险的,因为如果您决定使用 Thonny 的解释器,它可能会导致意外行为;

  2. 您可以关闭助手的 Mypy 检查。您可以通过以下方式执行此操作:Tools->Options...->Assistant 然后取消选中 Perform MyPy checks.