Fehlerausnahme muss von BaseException abgeleitet werden, selbst wenn dies der Fall ist (Python 2.7)

7

Was ist falsch mit dem folgenden Code (unter Python 2.7.1):

%Vor%

Wenn ich es ausführe, bekomme ich:

%Vor%

Aber es sieht für mich so aus, dass TestFailed von BaseException abgeleitet wird.

    
James Kanze 31.10.2011, 17:40
quelle

4 Antworten

9

__new__ ist eine statische Methode, die eine Instanz zurückgeben muss.

Verwenden Sie stattdessen die Methode __init__ :

%Vor%     
Raymond Hettinger 31.10.2011, 17:45
quelle
11

Andere haben Ihnen gezeigt, wie Sie Ihre Implementierung beheben können, aber ich finde es wichtig, darauf hinzuweisen, dass das von Ihnen implementierte Verhalten bereits das Standardverhalten von Ausnahmen in Python ist , sodass der Großteil Ihres Codes vollständig ist nicht notwendig. Ermitteln Sie einfach von Exception (die geeignete Basisklasse für Laufzeitausnahmen) und setzen Sie pass als Hauptteil.

%Vor%     
kindall 31.10.2011 18:09
quelle
4

Verwenden Sie __init__() anstelle von __new__() , um Klassen zu "initialisieren". In den meisten Fällen ist das Überschreiben von __new__ nicht notwendig. Es wird vor __init__ während der Objekterstellung aufgerufen.

Siehe auch Pythons Verwendung von __new__ und __init__?

    
Florian 31.10.2011 17:45
quelle
2

Die __new__ -Implementierung sollte eine Instanz der Klasse zurückgeben, aber sie gibt (standardmäßig) None zurück.

Es sieht jedoch so aus, als ob Sie hier __init__ statt __new__ verwenden sollten.

    
ekhumoro 31.10.2011 17:45
quelle

Tags und Links