Pylint pokazujący nieprawidłową nazwę zmiennej na wyjściu

Zrobiłem prosty skrypt w Pythonie do publikowania danych na stronie internetowej.

#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

Teraz pomyślałem, że sprawdźmy mój skrypt pod kątem standardów kodowania za pomocą narzędzia pylint.

Moje pylint wyjście jest następujące:

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

Teraz moje pytanie brzmi dlaczego pylint pokazuje moje nazwy zmiennych jako Invalid name. Czy nazwanie zmiennej w ten sposób jest błędną konwencją kodowania.

My complete pylint output.

Author: RanRag, 2012-05-30

3 answers

Ponieważ twój kod nie jest zawarty w klasie lub funkcji, oczekuje, że te zmienne będą stałymi i jako takie powinny być wielkimi literami.

Możesz przeczytać PEP8 aby uzyskać więcej informacji.

 45
Author: Christian Witts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-30 11:45:30

EDIT: jak już wspomnieli inni, pylint oczekuje, że zmienne globalne powinny być pisane wielkimi literami. Jeśli Ostrzeżenia naprawdę ci przeszkadzają, możesz je obejść, owijając małe urywki w ten sposób w funkcji main() -, a następnie użyć konwencji if __name__ == "__main__" -. Jeśli zależy ci na tym, możesz zmodyfikować wyrażenia regularne używane przez pylint do walidacji nazw zmiennych.

[[3]}od programistów z Pylint.

W tym przypadku Pylint mówi mi, że te zmienne wydają się być stałymi i powinny być wielkie. Ta zasada jest w rzeczywistości konwencją nazewniczą, która jest specyficzna dla ludzi z Logilab, którzy stworzyli Pylint. W ten sposób wybrali nazwę tych zmiennych. Ty też możesz tworzyć własne konwencje nazewnictwa, ale na potrzeby tego samouczka chcemy trzymać się standardu PEP-8. W tym przypadku zmienne, które zadeklarowałem, powinny być zgodne z konwencją wszystkich małych liter. Odpowiednią regułą byłoby coś w stylu: "should match [a-z_][a-z0-9_]{2,30}$". Zwróć uwagę na małe litery w wyrażeniu regularnym (a-z versus A-z)

Możesz go przetestować, uruchamiając: pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py

 17
Author: msvalkon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-30 12:00:48

Dzieje się tak dlatego, że url_to_short jest zadeklarowana w globalnej przestrzeni nazw, a pylint wymaga nazwania zmiennych globalnych (np. stałych) ALL_UPPERCASE.
Dlatego sprawdza, czy nazwa zmiennej pasuje do wyrażeń regularnych używanych dla globali, czyli: (([A-Z_][A-Z0-9_]*)|(__.*__))$ (zwróć uwagę na zakresy A-Z). Stąd błąd Invalid name.

 5
Author: rubik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-04 20:03:24