J'ai longtemps utilisé Visual Studio, mais il devenait trop compliqué à maintenir. Maintenant, j'ai essayé de passer à VS Code, mais il envoie un certain nombre de messages d'erreur PyLint qui n'ont aucun sens pour moi (et le programme fonctionne toujours comme prévu). Ces erreurs se produisent principalement avec le code Python généré à partir d'une structure GoogleProtoBuf.
Par exemple :
from lbsnstructure.lbsnstructure_pb2 import lbsnPost
def geoaccuracy_within_threshold(post_geoaccuracy, min_geoaccuracy):
"""Checks if geoaccuracy is within or below threshhold defined"""
if min_geoaccuracy == lbsnPost.LATLNG:
allowed_geoaccuracies = [lbsnPost.LATLNG]
elif min_geoaccuracy == lbsnPost.PLACE:
allowed_geoaccuracies = [lbsnPost.LATLNG, lbsnPost.PLACE]
elif min_geoaccuracy == lbsnPost.CITY:
allowed_geoaccuracies = [lbsnPost.LATLNG, lbsnPost.PLACE, lbsnPost.CITY]
else:
return True
# check post geoaccuracy
if post_geoaccuracy in allowed_geoaccuracies:
return True
else:
return False
Lance le message d'erreur E0602 de pyLint :
Variable indéfinie 'lbsnPost' pylint (E0602)
lbsnPost : GeneratedProtocolMessageType
Cependant, Google indique explicitement que cette forme de référencement de type est correcte :
Les enums sont développés par la métaclasse en un ensemble de constantes symboliques avec des valeurs entières. Ainsi, par exemple, la constante addressbook_pb2.Person.WORK a la valeur 2.
J'obtiens des erreurs similaires partout dans mon code (qui fonctionne bien). Je soupçonne qu'il s'agit de quelque chose que j'ai écrit dans la mauvaise convention, mais qui fonctionne quand même. Mais quelle est la bonne convention ?
Cette page semble traiter du même problème, mais aucune des solutions proposées ne fonctionne :
Variable indéfinie de l'importation lors de l'utilisation de tampons de protocole dans PyDev
c'est-à-dire, même en faisant lbsnpost().LATLNG
(instanciation du message protobuf), j'obtiens la même erreur de variable non définie.