So fangen Sie IndentationError [duplizieren]

8

Zunächst einmal - ich habe kein Problem mit schlecht eingeprägtem Code und ich habe eine Vorstellung davon, wie diese Ausnahme funktioniert.

Ich frage, ob es eine Möglichkeit gibt, IndentationError im Code mit einem try / except-Block zu fangen. Angenommen, ich schreibe einen Test für eine Funktion, die von jemand anderem geschrieben wurde. Ich möchte es in try / except Block laufen lassen und alle Warnungen behandeln, die er / sie machen könnte. Ich weiß, dass es kein gutes Beispiel ist, aber das erste kommt mir in den Sinn. Bitte konzentrieren Sie sich nicht auf ein Beispiel, sondern auf ein Problem.

Schauen wir uns den Code an:

%Vor%

Die Funktion:

%Vor%

Und das Ergebnis ist:

%Vor%

Und das ist etwas, ich bin bereit zu verstehen, weil Einrückung in der externen Funktion konsistent war.

Aber wenn die Funktion so aussieht:

%Vor%

Die Ausnahme ist nicht behandelt:

%Vor%

Gibt es einen Weg, es zu erreichen? Ich denke, das ist die Frage des Kompilierens, und soweit sehe ich keine Möglichkeit zu fangen. Macht der except IndentationError Sinn?

    
Gandi 18.01.2012, 14:25
quelle

3 Antworten

11

Ja, das kann gemacht werden. Die zu testende Funktion müsste jedoch in einem anderen Modul leben:

%Vor%

Wenn diese Option ausgeführt wird, wird die Ausnahme korrekt abgefangen. Es ist nichts wert, dass die Überprüfung auf das gesamte Modul gleichzeitig erfolgt; Ich bin mir nicht sicher, ob es einen Weg gibt, es feinkörniger zu machen.

    
NPE 18.01.2012, 14:28
quelle
6

IndentationError wird ausgelöst, wenn das Modul kompiliert wird. Sie können es beim Importieren eines Moduls abfangen, da das Modul beim ersten Import kompiliert wird. Sie können es nicht im selben Modul abfangen, das try/except enthält, weil Python mit dem IndentationError nicht fertig ist, das Modul zu kompilieren, und kein Code im Modul ausgeführt werden.

    
kindall 18.01.2012 14:30
quelle
5

Sie können ein Tool wie pylint verwenden, das Ihr Modul analysiert und fehlerhafte Einrückungen sowie viele andere Fehler meldet .

    
Alasdair 18.01.2012 14:29
quelle