mypy和django模型:如何检测不存在的属性上的错误

问题描述 投票:5回答:1

考虑此模型的定义和用法:

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看到此类错误?

django mypy
1个回答
0
投票

标志--check-untyped-defs(或--strict)报告缺少的属性。用mypy version 0.740检查。我认为您正在使用django-stubs插件。

© www.soinside.com 2019 - 2024. All rights reserved.