pep8.Checker.check_all

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Malachite
User
Beiträge: 34
Registriert: Sonntag 24. Juni 2012, 13:43
Wohnort: Berlin

Moin,
ich bin endlich mal dazu gekommen, mich mit pep8 zu beschäftigen. Da ich eine einzelne Datei testen will, benutze ich die Checker-Klasse. Leider steht in der Dokumentation nur, wie man die Anzahl der Fehler herausfindet, nicht aber die Fehler selbst. Ich habe jetzt selbst herausgefunden, dass man dazu eine Reporterklasse braucht. So weit bin ich erstmal.

Code: Alles auswählen

>>> path = "/home/yared/Entwicklung/pep8/test.py"
>>> import pep8
>>> checker = pep8.Checker(path, report=pep8.StandardReport)
>>> checker.check_all()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/local/lib/python3.3/dist-packages/pep8.py", line 1364, in check_all
    self.report.init_file(self.filename, self.lines, expected, line_offset)
TypeError: init_file() missing 1 required positional argument: 'line_offset'
>>> 
Ich habe pep8.py einmal geöffnet, wo ich folgendes finde:

Code: Alles auswählen

class Checker(object):
    ....
    def check_all(self, expected=None, line_offset=0):
        """
        Run all checks on the input file.
        """
        self.report.init_file(self.filename, self.lines, expected, line_offset)
        ...
init_file() müsste line_offset also auch bekommen, wenn ich es nicht check_all() übergebe, da es dort vordefiniert ist. Wieso bekomme ich trotzdem diesen Fehler?
BlackJack

@Malachite: Hier sieht man ja nur womit die `init_file()`-Methode aufgerufen wird. Was noch fehlt ist was sie denn nun eigentlich erwartet.

Muss man dem `Checker` eigentlich eine Report-Klasse übergeben, oder vielleicht besser ein Exemplar von einem Report? Das könnte nämlich eine Erklärung sein.
Malachite
User
Beiträge: 34
Registriert: Sonntag 24. Juni 2012, 13:43
Wohnort: Berlin

BlackJack hat geschrieben:@Malachite: Hier sieht man ja nur womit die `init_file()`-Methode aufgerufen wird. Was noch fehlt ist was sie denn nun eigentlich erwartet.
Sie erwartet genau diese vier (fünf mit self) Argumente, die ihr in Checker.check_all übergeben werden:

Code: Alles auswählen

class BaseReport(object):
    ...
    def init_file(self, filename, lines, expected, line_offset):
        ...
Muss man dem `Checker` eigentlich eine Report-Klasse übergeben, oder vielleicht besser ein Exemplar von einem Report? Das könnte nämlich eine Erklärung sein.
In dem Code, den ich gefunden habe, wird eine Klasse übergeben, und der Code funktioniert auch. Allerdings ist das Python-2-Code, und ich schreibe in Python 3. Sollte aber keinen Unterschied machen, denn beide pep8-Module sind identisch. Oder ist das eine Eigenheit von Python 2?

EDIT: Oh, da habe ich etwas verwechselt. Der Beispiel-Code übergibt ein Argument reporter an Checker, nicht report. reporter soll wohl eine Klasse sein, während report eine Instanz eines BaseReport sein soll.
Annotationen wären da schon sehr nützlich…
BlackJack

@Malachite: Was für Annotationen? Typannotationen? Damit irgendein Tool dann plärrt weil man den falschen Typ übergeben hat, obwohl der sich korrekt verhält. Nein Danke.
Antworten