Domanda

Supponiamo di avere un controller di metodo in questo modo:

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

Andando a http://site/search/ sarà causa di un'eccezione:TypeError:search() prende esattamente 2 argomenti (1 dato di fatto).

L'errore è logico, ma io preferisco di gestire con più grazia.Utilizza *args o **kwargs l'unico modo per evitare un errore che non mi sembra nemmeno di essere in grado di catturare?

EDIT:Credo si potrebbe utilizzare sempre title=Nessuno, ma troppo di che potrebbero ottenere brutto...

Comunque, c'è un modo per catturare l'eccezione e/o gestire argomento incongruenze con più grazia?

Grazie

È stato utile?

Soluzione

Eccezione generata a voi per la definizione di una "incompatibile" controllore firma del metodo avviene solo in debug / sviluppo di modalità.Non hai bisogno di gestire più correttamente in un ambiente di produzione, perché una volta che si disattiva la modalità di sviluppo, i metodi del controller invia un Errore HTTP 500, quando mancano i parametri essenziali.

Si potrebbe desiderare di prendere in considerazione le rispettive impostazioni nel vostro sviluppo.ini:

# 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

Spero che questa era la tua domanda.

Nel caso In cui si desidera che il controller di fare il suo lavoro, anche se manca di importanti parametri, è necessario definire i valori di default, altrimenti il controllore non può fare il suo lavoro correttamente comunque.La domanda migliore da porsi è:Semplicemente vuoi uno più bello il messaggio di errore o vuoi il controller per essere in grado di fare il suo compito.In quest'ultimo caso, specificare i parametri di default, è un esempio di buona pratica, *args e **kwargs per ogni metodo in modo che il cliente non riceve un errore, è un brutto hack nel mio opzione.

Se si desidera modificare la visualizzazione di questi errori, consultare /controllers/error.py

Spero che questo ha aiutato,

Tom

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top