如何在Spyder中运行mypy?执行%mypy提示runcell未定义报错
报错原因
runcell是Spyder的IPython运行环境自动注入的内置单元格执行函数,不属于Python标准语法范畴,也不会在用户编写的代码中显式定义。%mypy触发静态检查时,会扫描当前会话的所有执行上下文,无法识别Spyder隐式注入的这个特殊函数,就会抛出名称未定义的报错,该问题和mypy、mypy_ipython扩展是否安装成功无关。
可用解决方案
任选以下一种方案操作即可修复:
- 全局配置方案(推荐,一劳永逸不影响其他检查规则)
在当前工作目录下新建mypy.ini配置文件,写入以下配置,将runcell加入mypy的内置函数白名单:
保存配置后重启Spyder的IPython内核,再执行[mypy] builtins_whitelist = runcell%mypy命令即可正常做类型检查,不会再触发该报错。 - 单文件/单元格临时声明方案
如果不想做全局配置,可以在需要做类型检查的代码单元格最顶部,添加一行空函数桩声明,显式告诉mypy该函数存在:
这行声明不会对代码实际运行产生任何影响,仅作为静态检查的标识,添加后直接运行def runcell(*args, **kwargs) -> None: ...%mypy即可。 - 命令行参数屏蔽方案
执行%mypy命令时追加错误屏蔽参数,直接跳过名称未定义类的检查:
注意:该方案会屏蔽所有名称未定义类的报错,可能漏过代码里真实的变量名、函数名拼写错误,非临时快速验证场景不推荐使用。%mypy --disable-error-code=name-defined
内容的提问来源于stack exchange,提问作者Barzi2001
相关产品推荐
相关产品推荐

