我使用Visual Studio已有很长时间了,但是维护变得太复杂了。现在,我尝试转到VS Code,但是它抛出了许多PyLint错误消息,这些消息对我来说没有意义(并且程序仍然可以按预期运行)。这些错误主要发生在从GoogleProtoBuf结构生成的Python代码中。
例如:
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
从pyLint引发错误消息E0602:
未定义变量'lbsnPost'pylint(E0602)
lbsnPost:GeneratedProtocolMessageType
但是,Google explicitly states认为这种形式的类型引用是正确的:
枚举被元类扩展为具有整数值的一组符号常量。因此,例如,常量addressbook_pb2.Person.WORK的值为2。
我在我的代码中都遇到了类似的错误(可以正常工作)。我怀疑这是我用错误的约定编写的内容,但是仍然可以使用。但是正确的约定是什么?
此页面似乎在讨论相同的问题,但所有解决方案均无效:
Undefined variable from import when using protocol buffers in PyDev
也就是说,即使执行lbsnpost().LATLNG
(实例化protobuf消息),我也会遇到相同的未定义变量错误。
答案 0 :(得分:1)
我解决了我的问题。 Apparently,pylint在protobuf编译的python类中有(曾经有)问题。有一个软件包available可解决此问题。
pip install pylint-protobuf
)"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]
添加到VS Code中的用户设置没有错误!
答案 1 :(得分:0)
检查.vscode文件夹中的settings.json 我在virtualenv中工作,但是源python路径是本地路径。将python的路径更改为virtualenv。 给我工作。 要知道路径,请在激活了VE的终端中写“哪个python3”。