首页 > 解决方案 > 在 Python 3.8 中声明常量变量会触发“模块 'typing' 没有属性 'Final'”错误/警告(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) 给出错误

回溯(最近一次调用最后一次):文件“.../decimal_arithmetics.py”,第 2 行,输入 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警告

第 2 行:模块 'typing' 没有属性 'Final'

这个警告的原因是什么?

请让我知道是否需要一些其他信息来澄清这个问题。

标签: python-3.xconstantsfinaltypingpython-3.8

解决方案


解释

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

现在,为什么 Mypy在您的解释器Final中确实存在该警告时会显示该警告typing?它显示警告是因为它没有检查您的解释器的typing.py,它正在检查 Thonny 解释器的typing.py。不管您是否已将其设置为使用自己的解释器而不是 Thonny 的解释器,助手总是会检查您的代码,就好像您使用的是 Thonny 的解释器一样。

解决方案

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

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

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


推荐阅读