gpt4 book ai didi

django - mypy 和 django 模型 : how to detect errors on nonexistent attributes

转载 作者:行者123 更新时间:2023-12-03 13:42:00 29 4
gpt4 key购买 nike

考虑这个模型定义和用法:

from django.db import models


class User(models.Model):

name: str = models.CharField(max_length=100)


def do_stuff(user: User) -> None:

# accessing existing field
print(user.name.strip())

# accessing existing field with a wrong operation: will fail at runtime
print(user.name + 1)

# acessing nonexistent field: will fail at runtime
print(user.name_abc.strip())

运行时 mypy对此,我们将收到 user.name + 1 的错误。 :
error: Unsupported operand types for + ("str" and "int")

这可以。但是代码中还有另一个错误 - user.name_abc不存在,将在运行时导致 AttributeError。

但是,mypy 不会看到这一点,因为它允许代码访问任何 django 属性,并将它们视为 Any :
u = User(name='abc')
reveal_type(user.abcdef)
....

> error: Revealed type is 'Any

那么,如何让 mypy 看到这样的错误呢?

最佳答案

旗帜--check-untyped-defs (或 --strict )报告缺少的属性。
mypy version 0.740 核对.
我假设您正在使用 django-stubs插入。

关于django - mypy 和 django 模型 : how to detect errors on nonexistent attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53370377/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com