kmom06: Analyzer -> Min fina kod kraschar Pylint! :-O

  • Författare
  • Meddelande
Användarvisningsbild

mimo18

javascriptare

  • Inlägg: 32
  • Blev medlem: 02 sep 2018, 19:30

kmom06: Analyzer -> Min fina kod kraschar Pylint! :-O

Inlägg16 okt 2018, 10:36

Har gjort ett fantastiskt jobb (i mitt tycke :-) ) och byggt en state-of-the-art text-analyserare, men när jag försöker validera den mot Pylint får jag:

Kod: Markera allt
WARNING pylint failed: './me/kmom06/analyzer/analyzer.py'
Traceback (most recent call last):
  File "/usr/local/bin/pylint", line 11, in <module>
    sys.exit(run_pylint())

... [bla bla bla typ 100 rader] ...

    return self.parent.frame()
RecursionError: maximum recursion depth exceeded

... (3)


När jag googlar lite hittar jag info om att detta enklast löses genom att ändra i servern:
You can increment the stack depth allowed - with this, deeper recursive calls will be possible, like this:
Kod: Markera allt
sys.setrecursionlimit(10000) # 10000 is an example, try with different values

... But I'd advise you to first try to optimize your code, for instance, using iteration instead of recursion.


Det som orsakar "felet" är att jag lagt till en filter-funktion som körs efter att text-filen som ska analyseras har lästs in. Jag vill nämligen ta bort allt som inte är bokstäver eller "whitespace". Utan filter-funktionen kraschar inte Pylint vid validering. Och jag bör väl lägga till att koden fungerar som den ska! :-)

Kod: Markera allt
def read_file():
    """Read File From Disk"""
    global text, no_lines, file_read
    if file_read:
        return
    with open(current_file) as filehandle:
        text = ""
        no_lines = 0
        for line in filehandle:
            text += line.lower()
            no_lines += 1
        file_read = True
    filter_text()

def filter_text():
    """Filter text only keep letters and space"""
    global text
    filtered_text = ""
    for char in text:
        if char.isalpha() or char.isspace():
            filtered_text += char
    text = filtered_text


Min fråga är alltså, är det jag som på något sätt bör skriva om/optimera min kod eller är det bara så att servern bör justeras lite? ;-)
Användarvisningsbild

efo

dbwebb

  • Inlägg: 395
  • Blev medlem: 15 aug 2016, 11:58
  • Ort: Rödeby

Re: kmom06: Analyzer -> Min fina kod kraschar Pylint! :-O

Inlägg16 okt 2018, 11:03

Verkar som pylint på nått konstigt sätt når upp till Pythons maximum nivå för rekursion. Är definitivt ett fel jag inte sett tidigare.

Vad jag kan se i detta issue på GitHub, verkar det bero på += och att det på nått sätt triggar felet.

Jag misstänker att det isåfall är += på rad 6 i filter_text som orsaker felet. Verkar vara en bug i pylint, men testa byta ut mot filtered_text = filtered_text + char och se om det löser problemet.
Användarvisningsbild

mimo18

javascriptare

  • Inlägg: 32
  • Blev medlem: 02 sep 2018, 19:30

Re: kmom06: Analyzer -> Min fina kod kraschar Pylint! :-O

Inlägg16 okt 2018, 11:55

Jajamensan! Det löste problemet! Tack! :-D

Kod: Markera allt
def filter_text():
    """Filter text only keep letters and space"""
    global text
    filtered_text = ""
    for char in text:
        if char.isalpha() or char.isspace() or char == "-":
            filtered_text = filtered_text + char
    text = filtered_text

=
Kod: Markera allt
Validating '/home/saxon/students/20182/mimo18/dbwebb-kurser/python/me/kmom06/analyzer'.
...
*.py using pylint... (3)
...
OK Asserts: 15 Faults: 0
DONE to validate course results.

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 16 gäster