web-dev-qa-db-ja.com

出力で無効な変数名を示すパイリント

ウェブサイトにデータを投稿するための簡単なpythonスクリプトを作成しました。

#Imports

url_to_short = sys.argv[1]

post_url = 'https://www.googleapis.com/urlshortener/v1/url'
headers = {'Content-Type': 'application/json'}

data = {'longUrl': url_to_short}
post_data = json.dumps(data)

req = urllib2.Request(post_url, post_data, headers)
resp = urllib2.urlopen(req)

if resp.getcode() == 200:  
    content = json.loads(resp.read())

#Other stuff

pylintツールを使用して、コーディング標準のスクリプトを確認してみましょう。

私のpylint出力は次のとおりです。

************* Module post
C:  1,0: Missing docstring
C:  6,0: Invalid name "url_to_short" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:  8,0: Invalid name "post_url" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:  9,0: Invalid name "headers" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

# Other stuff

さて、私の質問はpylintが私の変数名をInvalid nameとして表示している理由です。このように変数に名前を付けることは、間違ったコーディング規則です。

完全なパイリント出力

50
RanRag

コードはクラスまたは関数に含まれていないため、これらの変数は constants であり、大文字である必要があります。

詳細については、 PEP8 を参照してください。

51
Christian Witts

編集:他の人が述べたように、pylintはグローバル変数が大文字でなければならないことを期待しています。警告が本当にわずらわしい場合は、main()- functionでこのような小さなスニペットをラップし、if __== "__main__"-コンベンション。または、気にする場合は、pylintが変数名の検証に使用する正規表現を変更できます。

Pylintの developers から。

この場合、Pylintは、これらの変数は定数であり、すべて大文字でなければならないことを教えてくれます。このルールは実際、Pylintを作成したLogilabの人々に固有の命名規則です。それが彼らがそれらの変数に名前を付けるために選んだ方法です。社内で独自の命名規則を作成することもできますが、このチュートリアルの目的のために、PEP-8標準に準拠したいと思います。この場合、宣言した変数はすべて小文字の規則に従う必要があります。適切なルールは、「[a-z _] [a-z0-9 _] {2,30} $に一致する必要があります」のようなものです。正規表現の小文字に注意してください(a-z対A-Z)

実行してテストできます:pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py

22
msvalkon

url_to_shortがグローバルネームスペースで宣言されており、pylintがALL_UPPERCASEという名前のグローバル変数(定数など)を必要とするためです。
したがって、変数名がグローバルに使用される正規表現と一致するかどうかを確認します。つまり、(([A-Z_][A-Z0-9_]*)|(__.*__))$A-Zの範囲に注意してください)。したがって、Invalid nameエラー。

6
rubik