Pylint-työkalu
Pylint-työkalu antaa palautetta Python-tiedoston koodin tyylistä. Työkalua voi käyttää apuna, kun halutaan tarkastaa, noudattaako koodi Pythonin tyyliohjetta.
Tarkastellaan esimerkkinä seuraavaa koodia:
app.py
from datetime import date
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
testMessage = "Heipparallaa!"
return testMessage
@app.route("/day")
def day():
names = ["maanantai", "tiistai", "keskiviikko","torstai",
"perjantai", "lauantai", "sunnuntai"]
weekday=date.today().weekday()
return "Tänään on " + names[weekday]
@app.route("/page/<int:id>")
def page(id):
return "Tämä on sivu " + str(id)
Komento pylint *.py
tarkastaa kaikki hakemistossa olevat Python-tiedostot. Tässä tapauksessa komento antaa seuraavan raportin:
$ pylint *.py
************* Module app
app.py:13:50: C0326: Exactly one space required after comma
names = ["maanantai", "tiistai", "keskiviikko","torstai",
^ (bad-whitespace)
app.py:15:11: C0326: Exactly one space required around assignment
weekday=date.today().weekday()
^ (bad-whitespace)
app.py:1:0: C0114: Missing module docstring (missing-module-docstring)
app.py:4:0: C0103: Constant name "app" doesn't conform to UPPER_CASE naming style (invalid-name)
app.py:7:0: C0116: Missing function or method docstring (missing-function-docstring)
app.py:8:4: C0103: Variable name "testMessage" doesn't conform to snake_case naming style (invalid-name)
app.py:12:0: C0116: Missing function or method docstring (missing-function-docstring)
app.py:19:9: W0622: Redefining built-in 'id' (redefined-builtin)
app.py:19:0: C0103: Argument name "id" doesn't conform to snake_case naming style (invalid-name)
app.py:19:0: C0116: Missing function or method docstring (missing-function-docstring)
-------------------------------------------------------------------
Your code has been rated at 1.67/10
Raportissa näkyy lista huomautuksista sekä lopussa koodin yleisarvosana.
Raportin läpikäynti
Käydään läpi raportissa olevat huomautukset:
app.py:13:50: C0326: Exactly one space required after comma
names = ["maanantai", "tiistai", "keskiviikko","torstai",
^ (bad-whitespace)
Listassa merkin ,
jälkeen tulisi olla välilyönti.
app.py:15:11: C0326: Exactly one space required around assignment
weekday=date.today().weekday()
^ (bad-whitespace)
Sijoituksessa merkin =
kummallakin puolella tulisi olla välilyönti.
app.py:1:0: C0114: Missing module docstring (missing-module-docstring)
Tiedoston alussa ei ole kommenttia, joka kuvaa tiedoston sisällön (docstring).
app.py:4:0: C0103: Constant name "app" doesn't conform to UPPER_CASE naming style (invalid-name)
Päätasolla oleva muuttuja tulkitaan vakioksi, jonka nimen tulisi olla APP
.
app.py:7:0: C0116: Missing function or method docstring (missing-function-docstring)
app.py:12:0: C0116: Missing function or method docstring (missing-function-docstring)
app.py:19:0: C0116: Missing function or method docstring (missing-function-docstring)
Funktion alussa ei ole kommenttia, joka kuvaa funktion sisällön (docstring).
app.py:8:4: C0103: Variable name "testMessage" doesn't conform to snake_case naming style (invalid-name)
Muuttujan nimi testMessage
tulisi olla test_message
.
app.py:19:9: W0622: Redefining built-in 'id' (redefined-builtin)
app.py:19:0: C0103: Argument name "id" doesn't conform to snake_case naming style (invalid-name)
Funktion parametrin nimi id
peittää Pythonin id
-funktion. Lisäksi muuttujan nimi id
on liian lyhyt.
Korjattu koodi
Raportissa on monia koodin tyyliin liittyviä asioita, joiden korjaaminen on helppoa. Seuraavassa on korjattu koodi:
app.py
from datetime import date
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
test_message = "Heipparallaa!"
return test_message
@app.route("/day")
def day():
names = ["maanantai", "tiistai", "keskiviikko", "torstai",
"perjantai", "lauantai", "sunnuntai"]
weekday = date.today().weekday()
return "Tänään on " + names[weekday]
@app.route("/page/<int:id>")
def page(page_id):
return "Tämä on sivu " + str(page_id)
Näiden muutosten jälkeen voidaan pyytää uusi raportti:
$ pylint *.py
************* Module app
app.py:1:0: C0114: Missing module docstring (missing-module-docstring)
app.py:4:0: C0103: Constant name "app" doesn't conform to UPPER_CASE naming style (invalid-name)
app.py:7:0: C0116: Missing function or method docstring (missing-function-docstring)
app.py:12:0: C0116: Missing function or method docstring (missing-function-docstring)
app.py:19:0: C0116: Missing function or method docstring (missing-function-docstring)
------------------------------------------------------------------
Your code has been rated at 5.83/10 (previous run: 1.67/10, +4.17)
Muutosten jälkeen raportti on selkeästi lyhempi ja koodin arvosana on parempi.
Raportissa on edelleen huomautuksia, mutta voimme olla tyytyväisiä tähän. Tällä kurssilla ei ole vaatimuksena kirjoittaa docstring-kommentteja, eikä päätasolla oleva muuttujan nimi app
haittaa tässä tilanteessa.