Я очень хотел бы интегрировать pylint в процесс сборки для моих проектов python, но я столкнулся с одним show-stopper: один из типов ошибок, которые я считаю чрезвычайно полезными -: - E1101: *%s %r has no %r
member*
постоянно сообщает об ошибках при использовании общих полей django , например:
E1101:125:get_user_tags: Class 'Tag' has no 'objects' member
что вызвано этим кодом:
def get_user_tags(username):
"""
Gets all the tags that username has used.
Returns a query set.
"""
return Tag.objects.filter( ## This line triggers the error.
tagownership__users__username__exact=username).distinct()
# Here is the Tag class, models.Model is provided by Django:
class Tag(models.Model):
"""
Model for user-defined strings that help categorize Events on
on a per-user basis.
"""
name = models.CharField(max_length=500, null=False, unique=True)
def __unicode__(self):
return self.name
Как настроить Pylint для правильного учета таких полей, как объекты? (Я также изучил исходный код Django, и мне не удалось найти реализацию objects
, поэтому я подозреваю, что это не «просто» поле класса. С другой стороны, я новичок в python, поэтому я вполне мог что-то пропустить.)
Изменить: единственный способ, который я нашел, чтобы сообщить pylint не предупреждать об этих предупреждениях, - это заблокировать все ошибки типа (E1101), что не является приемлемым решением, поскольку это (на мой взгляд) чрезвычайно полезная ошибка. Если есть другой способ, без дополнения источника pylint, укажите мне конкретику :)
См. Здесь краткое изложение проблем, с которыми я столкнулся, pychecker
и pyflakes
- они оказались очень нестабильными для общего использования. (В случае pychecker сбои возникли в коде pychecker, а не в источнике, который он загружал / вызывал.)