python-3.x - 在 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'
这个警告的原因是什么?
请让我知道是否需要一些其他信息来澄清这个问题。
解决方案
解释
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 的解释器一样。
解决方案
有几种方法可以阻止警告出现:
您可以将 Thonny 解释器的typing.py替换为您的解释器的typing.py,但这是有风险的,因为如果您决定使用 Thonny 的解释器,它可能会导致意外行为;
您可以关闭助手的 Mypy 检查。您可以通过以下方式执行此操作:
Tools
->Options...
->Assistant
然后取消选中Perform MyPy checks
。
推荐阅读
- javascript - 嵌入标题中的小图像,Discord.js
- node.js - 来自 EJS 的事件处理
- windows - 如何从 QFile 或 QSaveFile 获取 Windows HANDLE 以用于 ReOpenFile?
- python - 从其他脚本导入函数
- clojure - 编译 Clojure 时获得更多有用的警告
- laravel - 在 laravel 中创建多个模型到 belongsToMany
- java - 如何为我的代码创建一个循环,以便它运行直到用户提供正确的输入?
- algorithm - 找到区间最大交点出现 2 次的点
- numpy - 二维矩阵上的 Numpy Where () 和 All()
- java - flink 中的 Kafka 消费者