[英]How do I tell MyPy that errors about os.path are not errors?
在 VS Code 中,Problems 选项卡在使用os.path.join
时显示错误,但代码实际运行。 我如何告诉 MyPy 这些不是错误?
我在 Salome 平台上工作,运行的现有代码显示以下错误:(具体程序是 envSalome.py,它是启动整个 salome-meca 表演的程序):
import os
kernel_root=os.getenv("KERNEL_ROOT_DIR")
kernel_root = os.path.realpath(kernel_root) # this is line 39 in the error below
sys.path[:0]=[os.path.join(kernel_root,"bin","salome")] # this is line 40 in the error below
该程序运行没有错误。
我已经使用了 VS Code 左下角的 python 解释器链接到 select 附带 Salome 的 python3.exe(并且运行此代码没有错误)。
我的问题:
在终端 window 的“问题”选项卡中,MyPy 显示以下错误:
“realpath”的类型变量“AnyStr”的值不能是“Optional[str]” mypy(error) [39, 16]
“join”的参数 1 具有不兼容的类型“Optional[str]”; 预期“联合[str,_PathLike[str]]” mypy(错误)[40,29]
os.getenv("KERNEL_ROOT_DIR")
可能返回str
或None
。 您没有考虑到这一点,而 mypy 告诉您,当它返回None
时您没有涵盖该案例。
如果您希望该值始终存在于环境中,我建议使用不返回None
的 function ,例如
kernel_root=os.environ["KERNEL_ROOT_DIR"]
MyPy 只是在做它应该做的事情: “键入检查你的代码并找到常见的错误。 ” 。
在这种情况下,错误是有意义的,因为os.getenv(key, default=None)
返回“环境变量键的值(如果存在,则返回默认值)。 ”。 如果KERNEL_ROOT_DIR
环境变量,则os.path
真实路径或join
realpath
将引发异常。
如果您100% 确定KERNEL_ROOT_DIR
变量将始终存在于您将运行此代码的环境中,您可以告诉 MyPy 忽略这些错误。 (我们告诉 MyPy 忽略它们,因为 MyPy 无法了解您的 Salome 平台或理解它们不是错误。)
有几种方法。
您可以通过在该行上添加特殊的# type: ignore[code]
注释来消除那些特定行上的特定错误:
kernel_root = os.getenv("KERNEL_ROOT_DIR")
kernel_root = os.path.realpath(kernel_root) # type: ignore[type-var]
sys.path[:0] = [os.path.join(kernel_root, "bin", "salome")] # type: ignore[arg-type]
要在 VS Code 的问题选项卡上显示确切的 MyPy 错误代码,请将以下内容添加到您的settings.json 中:
"python.linting.mypyArgs": [
"--show-error-codes"
]
如果您不关心查找特定的错误,而只想消除该行的所有错误,则可以删除[code]
部分并执行# type: ignore
。
如果您可以将这些行隔离到特定模块中,则可以告诉 MyPy 忽略该特定模块的所有错误。 这可以通过创建一个MyPy 配置文件来完成,该文件是一个mypy.ini或一个.mypy.ini或一个放置在工作区根目录下的setup.cfg文件,然后添加ignore_errors
选项。
例如,如果这些行是 package myproject内的模块config.py的一部分,则拥有此 MyPy 配置文件将使这些错误静音:
[mypy-myproject.config]
ignore_errors = True
如果您只想忽略配置文件中的特定错误代码,可以使用disable_error_code
选项,但它只是一个全局设置:
[mypy]
disable_error_code = type-var
上面的示例忽略了其中一个错误:
但请注意,这也会忽略同一模块上其他行的其他错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.