web-dev-qa-db-fra.com

Pylint affichant un nom de variable non valide en sortie

J'ai créé un simple script python) pour publier des données sur un site Web.

#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

Maintenant, je pensais que nous vérifions les normes de codage de mon script avec l’outil pylint.

Mon résultat pylint est le suivant:

************* 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

Maintenant, ma question est de savoir pourquoi pylint affiche les noms de mes variables sous la forme Invalid name. Nommer variable de cette manière est une mauvaise convention de codage.

Mon sortie complète du pylint .

50
RanRag

Comme votre code n'est pas contenu dans une classe ou une fonction, il s'attend à ce que ces variables soient constantes et, en tant que telles, elles doivent être majuscules.

Vous pouvez lire PEP8 pour plus d'informations.

51
Christian Witts

EDIT: Comme d’autres l’ont mentionné, pylint s’attend à ce que les variables globales soient UPPERCASE. Si les avertissements vous dérangent vraiment, vous pouvez les contourner en encapsulant de tels extraits dans une fonction main()-, puis utilisez la commande if __== "__main__"-convention. Si vous le souhaitez, vous pouvez également modifier les expressions régulières utilisées par pylint pour valider les noms de variables.

De la développeurs de Pylint.

Dans ce cas, Pylint me dit que ces variables semblent être des constantes et devraient être toutes en majuscules. Cette règle est en fait une convention de dénomination propre aux personnes de Logilab qui ont créé Pylint. C'est ainsi qu'ils ont choisi de nommer ces variables. Vous aussi, vous pouvez créer vos propres conventions d'appellation internes, mais pour les besoins de ce tutoriel, nous souhaitons nous en tenir à la norme PEP-8. Dans ce cas, les variables que j'ai déclarées doivent suivre la convention de toutes les minuscules. La règle appropriée serait quelque chose comme: "devrait correspondre à [a-z _] [a-z0-9 _] {2,30} $". Notez les lettres minuscules dans l'expression régulière (a-z versus A-Z)

Vous pouvez le tester en lançant: pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py

22
msvalkon

C'est parce que url_to_short est déclaré dans l’espace de noms global et pylint requiert le nom de variables globales (constantes, par exemple) ALL_UPPERCASE.
Par conséquent, il vérifie si le nom de votre variable correspond à l’expression rationnelle utilisée pour les globals, qui est: (([A-Z_][A-Z0-9_]*)|(__.*__))$ (noter la A-Z gammes). D'où le Invalid name Erreur.

6
rubik