2009-07-01 8 views
0

Supposons que j'ai une méthode de commande comme ceci:contrôleur de manipulation des paramètres du régulateur manquant dans Turbogears 2

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

Aller à http://site/search/ provoquera une exception à être jeté: TypeError: recherche() prend exactement 2 arguments (1 donné).

L'erreur est logique, mais je préfère le gérer plus gracieusement. L'utilisation de * args ou de ** kwargs est-elle le seul moyen d'éviter une erreur que je ne semble même pas pouvoir détecter?

EDIT: Je suppose que je pourrais toujours utiliser title = Aucun, mais trop de ce pourrait devenir laid ...

Quoi qu'il en soit, est-il un moyen d'attraper l'exception et/ou gérer discordances argument plus avec grâce?

Merci

Répondre

1

L'exception jeté à vous pour spécifier une signature de la méthode de commande "incompatible" ne se produit que dans debug/mode de développement. Vous n'avez pas besoin de le gérer plus facilement dans un environnement de production, car une fois que vous désactivez le mode de développement, les méthodes du contrôleur envoient une erreur HTTP 500 en l'absence de paramètres essentiels.

Vous voudrez peut-être prendre en compte les paramètres respectifs dans votre development.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 

J'espère que cela était votre question. Dans le cas où vous voulez toujours que le contrôleur fonctionne, même s'il manque des paramètres importants, vous devez définir des valeurs par défaut, sinon le contrôleur ne peut pas faire son travail correctement de toute façon. La question que vous vous posez mieux est: Voulez-vous simplement un message d'erreur plus agréable, ou voulez-vous que le contrôleur soit capable de faire sa tâche. Dans ce dernier cas, la spécification des paramètres par défaut est la meilleure pratique, * args et ** kwargs pour chaque méthode juste pour que le client ne reçoive pas une erreur est un hack très moche dans mon option.

Si vous souhaitez modifier l'affichage de ces erreurs se rapportent à /controllers/error.py

Hope this aidé,

Tom

+0

Ma question était principalement impliqué dans la meilleure façon de gérer les erreurs comme ce. Je pense que vous avez mieux répondu quand vous avez mentionné /controllers/error.py. Je vais jeter un coup d'oeil à ça. Merci. – user37078