Seite 1 von 1

pep8.Checker.check_all

Verfasst: Mittwoch 24. Juli 2013, 23:15
von Malachite
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?

Re: pep8.Checker.check_all

Verfasst: Donnerstag 25. Juli 2013, 07:13
von 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.

Re: pep8.Checker.check_all

Verfasst: Donnerstag 25. Juli 2013, 12:25
von Malachite
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…

Re: pep8.Checker.check_all

Verfasst: Donnerstag 25. Juli 2013, 12:51
von 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.