python - mypy:disallow_any_unimported 未按预期工作
问题描述
我正在向 python 3.7 中的现有项目添加类型注释。该项目使用 sqlalchemy,但我没有使用他们的存根,因为它们不完整。但是,我想在我的 ORM 类上注释属性,并且我希望 mypy 对所有这些强制注释。
这是一个最小的例子来说明我的意思:
测试.py:
from sqlalchemy import Column, Integer
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import as_declarative
@as_declarative
class Base:
pass
class Foo(Base):
__tablename__ = 'foo'
oid = Column(Integer, primary_key=True)
mypy.ini:
[mypy]
[mypy-sqlalchemy.*]
ignore_missing_imports = True
[mypy-test]
disallow_any_unimported = True
有了这个,我期待 mypy 抱怨oid
属性上缺少类型,然后我可以用oid: int = Column(...)
. 但我根本没有收到任何错误。
解决方案
好吧,看来我误解了disallow_any_unimported
. 该标志基本上似乎涵盖了在注释中导入和使用未知类型的情况:
from untyped import Foo
# ...
x: Foo = bar
在我的情况下oid
被推断是Any
因为mypy不知道Column()
返回什么。
所以看起来我需要使用的标志是 disallow_any_expr
不允许Any
在任何表达式中使用。
编辑:在我的原始示例(以及可能的其他内容)disallow_any_expr
中也不允许使用的副作用。Integer
即使文档说Any
仍然允许在函数调用中使用,我本来希望扩展到构造函数。所以这个标志不是我问题的答案。但是,我找不到更细粒度的东西。
推荐阅读
- android - Alternate of ProgressDialog
- django - 未设置 Django CSRF cookie:使用 Ajax 跨站点
- azure-devops - 如何为错误报告者设置权限
- python - PyInstaller - ImportError:没有名为 _bootlocale 的模块
- tensorflow - 如何在 Kali Linux(Raspberry Pi 4 ARM 映像)中安装 Tensorflow?
- javascript - Google 驱动器文件选择器:点击“选择”时对话框不会关闭
- php - 如何在 Woocommerce 中获取运输方式自定义附加数据?
- scala - kafka和spark之间的连接:找不到数据源:kafka
- runtime - vue3-runtime-template:[Vue 警告]:在渲染期间访问了属性“模型”,但未在实例上定义
- blazor - 为什么 Blazor 的 EditForm 需要两次单击提交按钮才能执行任何操作?