在Python 3.8中声明一个常量变量会触发“模块'类型化'没有属性'Final'”错误/警告(Python 3.8,Thonny IDE)

问题描述 投票:0回答:1

我正在尝试使用以下代码在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 FinalImportError:无法从“键入”中导入名称“ Final”(/Applications/Thonny.app/Contents/Frameworks/Python.framework/Versions/3.7/lib/python3.7/typing.py)

这是可以理解的,虽然它是3.8版的新功能,但Thonny仍使用3.7版。

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

第2行:模块“键入”没有属性“最终”

此警告的原因是什么?

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

python-3.x constants final typing python-3.8
1个回答
1
投票

说明

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. [您可以用口译员的typing.py替换Thonny口译员的typing.py,但这是有风险的,因为如果您决定使用Thonny口译员,可能会导致意外行为;

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

© www.soinside.com 2019 - 2024. All rights reserved.