防止平台相关 python 代码中的 mypy 错误
Prevent mypy errors in platform dependent python code
我有一些类似于下面的 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
有没有更好的解决方案?
好的,按照@SUTerliakov 的建议检查 Docs 之后,
看来我必须改变我的
if platform.system() == "Windows"
对此,语义相同检查:
if sys.platform == "win32"
只有第二个版本 触发了一些神奇的内置 mypy 特例
将此标识为平台检查并忽略分支
适用于其平台。
我有一些类似于下面的 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
有没有更好的解决方案?
好的,按照@SUTerliakov 的建议检查 Docs 之后, 看来我必须改变我的
if platform.system() == "Windows"
对此,语义相同检查:
if sys.platform == "win32"
只有第二个版本 触发了一些神奇的内置 mypy 特例 将此标识为平台检查并忽略分支 适用于其平台。