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