2016-12-12 3 views
-2

Der Versuch, eine Funktion zu machen Namen von Python-Funktionen in einer Datei für eine Python-Klasse Ich habe keine Ahnung, warum es nur ein Komma Rückkehr, die ich zwischen den Funktionsnamen hinzufügen, inPython Funktion Name Finder funktioniert nicht

def pythonanalysis(s): 
    pythonlen = str(s.count("\n")) 
    functionname = '' 
    funcdoc = s 
    counter = 0 
    while funcdoc.find("def") != -1: 
     function = funcdoc.find("def") 
     funcdoc = funcdoc[function + 4:funcdoc.find("(")] 
     functionname += funcdoc[:funcdoc.find("(")] + ", " 
     counter += 1 
     print(functionname) 
    forlen = str(s.count("for")) 
    iflen = str(s.count("if")) 
    whilelen = str(s.count("while")) 
    authnum = s.find('__author__ =') 
    author = s[authnum + 14:] 
    authname = author[:author.find('\'')] 

    return "There are " + pythonlen + " lines in this file \n\ 
    There are "+ str(counter) + " functions in this document named: " + functionname + "\n\ 
    There are " + forlen+" for loops and " + iflen + " if loops and " + whilelen + " while loops\n\ 
    The author is " + authname 
+4

Der Code, den Sie selbst gepostet haben, schlägt sofort fehl, wenn er sich auf 'funcdoc' bezieht, können Sie a) ein vollständiges Beispiel liefern und b) was er * tut * (einen Fehler ausgeben, nicht die erwartete Ausgabe ausgeben usw.)) –

+0

@NickT Nur den Rest hinzugefügt, und es scheitert nicht nur die einzige Sache, die es für den Funktionsfinder zurückgibt, ist das Komma, das ich hinzufüge –

+1

Sie sollten eine bessere Fehlerbeschreibung als 'nicht arbeiten' geben. Das allein ist ein Grund, warum viele schließen werden. Was genau funktioniert nicht und wenn Sie auch eine einfache Eingabe und Ausgabe Ihres Problems, die Ihre Frage an die Stelle stellen könnte. –

Antwort

1
function = funcdoc.find("def") 
    funcdoc = funcdoc[function + 4:funcdoc.find("(")] 

die „(“ dass Sie möglicherweise vor dem „def“ finden könnte, die hier in einer leeren Zeichenfolge führen würde! Auch wenn Sie die die finden „(“ das ist nur nach dem Funktionsnamen, Sie verwerfen die gesamte Datei nach diesem Punkt, so dass Sie nie mehr als eine Funktion finden könnten Hinweis: Die str.find() Methode verwendet einen optionalen zweiten Parameter t hat gibt den Startpunkt der Suche an.

Verwandte Themen