Skip to content

pylint valideringsfel #46

Description

@AndreasArne

Ibland är det svårt att förstå valideringsfelen pylint ger. Här tänkte jag samla förklaringar och exempel. Men det finns väldigt många valideringsfel man kan få och därför tar den kunskapen lång tid att samla och bygga upp.

Andreas förklarar vad ett valideringsfel är och hur man läser dem.

Jag har hittat en webbsida som redan har samlat förklaringar och exempel för de flesta felen, utgå från den i första hand. Dock är vissa exempel och förklaring inte jättebra, om ni hittar ett fel ni inte förstår efter ni har läst om det. Skriv till mig så försöker jag lägga in bättre förklaring och exempel nedanför.

List of errors and solutions.

Hur ni läser ett felmeddelande

Ett valideringsfels uppbyggnad: <fil>:<radnummer>:<columnnummer>: <felkod>: <förklaring av felet> (<felnamn>)

  • fil - sökvägen till filen med felet
  • radnummer - rad där felet börjar. Kan vara fel om felet sträcker sig över flera rader eller om det orsakas av kod ovanför som pylint inte kan hantera. Men stämmer oftasts.
  • columnnummer - var på raden felet börjar.
  • felkod - varje fel pylint letar efter har ett unikt id. Som går att söka på för att hitta förklaring och lösningar.
  • förklaring av felet - pylints försök till att förklara vad som är fel. Det varierar hur bra pylint är på att förklara förklara felen.
  • felnamn - unikt namn för felet, som felkoden fast lite mer läsbart och förståligt. Går att söka på för att hitta förklaring och lösningar.

Exempel på ett fel: me/kmom04/marvin3/main.py:30:0: C0116: Missing function or method docstring (missing-function-docstring)

Om du får ett valideringsfel kopiera felkoden eller felnamnet. Sök på det på Google, "List of errors" länken ovanför eller i denna tråden.

Activity

  1. AndreasArne commented on May 31, 2021

    @AndreasArne
    MemberAuthor

    Länkar till egna förklaring av fel:

  2. pinned this issue on Sep 6, 2021
  3. AndreasArne commented on Oct 6, 2022

    @AndreasArne
    MemberAuthor

    C0123: Using type() instead of isinstance() for a typecheck. (unidiomatic-typecheck)
    Svar på varför vi ska använda isinstance istället för type:

    Skillnaden är egentligen inget vi har nytta av i denna (python) kursen, men är något som är relevant i den objektorienterade kursen efter jul. Efter jul kommer vi att lära oss att skapa egna klasser/datatyper och då kan vi göra en klass som bygger på en annan. Tänk, om vi har en klass som heter Animal och sen skapar vi en klass som heter Dog och Dog bygger/ärver Animal. Om vi då använder type funktionen när vi vill jämföra data typer då kommer vi få False om vi jämför en Dog med en Animal. Men oftast vill vi att det ska blir True, för att Dog bygger på Animal.
    Numera är rekommenderat att man bara använder sig av isinstance() för att den gör samma sak och mer än vad type() gör.

  4. AndreasArne commented on Oct 6, 2022

    @AndreasArne
    MemberAuthor

    C0116: Missing function or method docstring (missing-function-docstring)
    Alla funktioner behöver innehålle en docstring där du förklarar vad koden som funktionen innehåller gör.

    def a_func():
        """
        Detta är en docstring som förklarar vad funktionen gör
        """
        pass
    
  5. AndreasArne commented on Oct 6, 2022

    @AndreasArne
    MemberAuthor

    R1710: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements)

    Är vad den säger, om du har en funktion som innehåller en if-sats med elif och else, och du i något av de if-blocken har en return. Då borde du ha en return i alla if-blocken. Annars bör du skriva om koden så du inte har return i något if-block utan du har en return i slutet av funktionen.

    T.ex.

    def a_function(in_value):
        if isinstance(in_value, int):
            return in_value * in_value
    
        if isinstance(in_value, str): 
            return in_value + "hej"

    Här har vi ingen return om båda if-satserna blir False. En lösning som typ alltid funkar är att skriva om koden så den bara innehåller en return och den ligger sist i funktionen.

        result = ""
        if isinstance(in_value, int):
            result = in_value * in_value
    
        if isinstance(in_value, str): 
            result = in_value + "hej"
        return result
  6. AndreasArne commented on Jun 16, 2023

    @AndreasArne
    MemberAuthor

    R1703 (simplifiable-if-statement)

    Exempel på felaktigt kod,

    is_true = False
    
    if bar > baz:
        is_true= True
    else:
        is_true = False

    Vi använder if-satsen för att kolla om något är sant eller falskt. Om det är sant sätter vi en variabel till sant, om det är falskt sätter vi variabeln till falskt. Här behövs inte if-satsen, den är onödig. Det räcker med att bara använda jämförelse operatorn och tilldela vad den returnerar till variabeln.

    Rätt lösning

    is_true = bar > baz

    Raden ovanför gör samma sak som hela if-satsen och är bättre lösning.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    FAQInformation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions