我有类似于以下一段Python代码的东西:
import platform
if platform.system() == "Windows":
import winreg
import win32api
def do_cross_platform_thing() -> None:
if platform.system() == "Windows":
# do some overly complicated windows specific thing with winreg and win32api
else:
# do something reasonable for everyone else
现在,在 Linux 上,
mypy
抱怨
win32api
不存在,winreg
模块是
已定义,但基本上已禁用(所有代码都在“is windows”检查后面)。有没有合理的方法来处理这个问题?我目前的解决方案是
# type: ignore
到处都是--ignore-missing-imports
有没有更好的解决方案?
好的,在检查了Docs后,@SUTerliakov 如此善意地建议, 看来我必须改变我的
if platform.system() == "Windows"
对此,语义相同的检查:
if sys.platform == "win32"
只有第二个版本会触发一些神奇的内置 mypy 特殊情况 将此识别为平台检查并忽略分支 not 适用于其平台。
您可以使用
# type: ignore[some-mypy-code,unused-ignore]
语法在 Mypy 1.4 中引入(2023 年 6 月 20 日发布,PR 15164)。将
some-mypy-code
替换为从 mypy 获得的错误代码。取自 PR 的示例:
try:
import graphlib # type: ignore[import,unused-ignore]
except ImportError:
pass
在上面,
ignore[import]
忽略导入错误(例如在Python 3.7上,其中graphlib不存在)并且ignore[unused-ignore]
忽略由warn_unused_ignores
mypy设置引起的错误,例如Python 3.9 中提供此模块。