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 明示的に述べる は、この形式の型参照が正しいことを示しています。
列挙型は、メタクラスによって整数値を持つ一連のシンボリック定数に展開されます。したがって、たとえば、定数addressbook_pb2.Person.WORKの値は2です。
コード全体で同様のエラーが発生します(正常に機能します)。これは私が間違った規則で書いたものだと思いますが、どういうわけかまだ機能します。しかし、正しい慣習は何ですか?
このページでは同じ問題について説明しているようですが、解決策はどれも機能しません。
PyDevでプロトコルバッファーを使用する場合のインポートからの未定義変数
つまり、lbsnpost().LATLNG
(protobufメッセージのインスタンス化)を行っている場合でも、同じ未定義の変数エラーが発生します。
Virtualenvで動作する.vscodeフォルダーのsettings.jsonを確認しますが、ソースpythonパスはローカルパスです。pythonのパスをvirtualenvに変更します。私に動作します。パスを知るには、「which python3」を書き込みますVEがアクティブ化された端末.