58

Web サイトにデータを投稿するための簡単な 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。このように変数に名前を付けているのは、間違ったコーディング規則です。

私の完全な pylint output

4

3 に答える 3

60

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

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

于 2012-05-30T11:45:30.557 に答える
27

編集: 他の人が述べたように、pylint はグローバル変数が大文字であることを期待しています。警告が本当に気になる場合は、このような小さなスニペットを-function でラップしてから -conventionmain()を使用することで警告を回避できますif __name__ == "__main__"。または、必要に応じて、pylint が変数名を検証するために使用する正規表現を変更できます。

Pylintの開発者から。

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

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

于 2012-05-30T11:47:17.997 に答える
7

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

于 2012-05-30T11:46:51.027 に答える