Contrôleur de manutention manquant paramètres du régulateur à 2 TurboGears

StackOverflow https://stackoverflow.com/questions/1067056

  •  21-08-2019
  •  | 
  •  

Question

Supposons que j'ai une méthode de commande comme ceci:

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

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

L'erreur est logique, mais je préfère gérer plus gracieusement. Est-ce en utilisant args ou ** * kwargs la seule façon d'éviter une erreur que je ne semble même pas pouvoir attraper?

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

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

Merci

Était-ce utile?

La solution

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 ne avez pas besoin de le manipuler avec plus de grâce dans un environnement de production, car une fois que vous désactivez le mode de développement, les méthodes de commande envoyer un HTTP 500 erreur quand ils ne disposent pas des 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 le contrôleur faire son travail, même si son 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 demandez de mieux est: Est-ce que vous voulez simplement un meilleur message d'erreur, ou voulez-vous que le contrôleur soit capable de faire sa tâche. Dans ce dernier cas, en spécifiant les paramètres par défaut est la meilleure pratique, * args et kwargs ** pour chaque méthode juste pour que le client ne marche pas obtenir une erreur est un hack très laid dans mon option.

Si vous voulez changer l'affichage de ces erreurs se référer à /controllers/error.py

L'espoir que cela a aidé,

Tom

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top