Frage

Angenommen, ich eine Controller-Methode haben etwa so:

@expose()
def search(self, title):
    return dict()

Going to http: // site / search / wird eine Ausnahme verursacht geworfen werden: Typeerror: Suche ( ) hat genau zwei Argumente (1 angegeben).

Der Fehler ist logisch, aber ich würde es eher elegante handhaben. Ist mit * args oder ** kwargs der einzige Weg, um einen Fehler zu vermeiden, die ich scheine nicht einmal in der Lage sein, zu fangen?

EDIT: Ich glaube, ich immer title = Keine verwenden könnte, aber zu viel davon könnte hässlich ...

Auf jeden Fall ist es eine Möglichkeit, um die Ausnahme zu fangen und / oder zu behandeln anmutiges Argument Mismatches?

Danke

War es hilfreich?

Lösung

Die Ausnahme auf dich geworfen für die Angabe einer „inkompatibel“ Controller-Methode Signatur geschieht nur in Debug / Entwicklungsmodus. Sie brauchen nicht in einer Produktionsumgebung eleganter zu handhaben, denn wenn Sie die Entwicklung Modus zu deaktivieren, Controller-Methoden einer HTTP 500 Fehler senden, wenn sie wesentliche Parameter fehlen.

Sie können die entsprechenden Einstellungen in Ihrem development.ini berücksichtigen wollen:

# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing ANYONE to
# execute malicious code after an exception is raised.
set debug = false

Ich hoffe, dass dies Ihre Frage ist.

Im Fall, dass Sie immer noch die Steuerung ihre Arbeit tun wollen, obwohl seine wichtige Parameter fehlt, müssen Sie Standardwerte definieren, sonst kann der Controller seine Arbeit richtig ohnehin nicht tun. Die Frage, die Sie sich besser fragen: Haben Sie einfach eine schönere Fehlermeldung möchten, oder haben Sie die Steuerung zu tun, um seine Aufgabe in der Lage sein wollen. Im letzteren Fall Parameter Standard Angabe ist Best Practice, * args und ** kwargs für jede Methode nur so der Kunde einen Fehler doesnt bekommt ein sehr hässlicher Hack in meiner Option ist.

Wenn Sie die Anzeige dieser Fehler ändern möchten siehe /controllers/error.py

Hope dies dazu beigetragen,

Tom

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top