Manipulação controlador faltando parâmetros do controlador em turbogears 2
-
21-08-2019 - |
Pergunta
Suponha que eu tenho um método de controlador assim:
@expose()
def search(self, title):
return dict()
Indo para http: // site / pesquisa / fará com que uma exceção seja lançada: TypeError: procure ( ) tem exatamente 2 argumentos (1 dadas).
O erro é lógico, mas eu prefiro lidar com isso mais graciosamente. É usando args * ou ** kwargs a única maneira de evitar um erro que eu nem sequer parecem ser capazes de captura?
EDIT: Eu acho que eu poderia sempre usar title = None, mas muito de que poderia ficar feia ...
De qualquer forma, há uma maneira para capturar a exceção e / ou inadequações argumento lidar com mais graciosamente?
Graças
Solução
A exceção jogado em você para especificar uma assinatura de método "incompatível" controlador só acontece no modo de depuração / desenvolvimento. Você não precisa lidar com isso mais graciosamente em um ambiente de produção, porque uma vez que o modo de desenvolvimento desativar, métodos do controlador envie um HTTP 500 erro quando eles não têm parâmetros essenciais.
Você pode querer considerar as respectivas configurações no seu 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
Espero que esta foi a sua pergunta.
No caso que você ainda deseja que o controlador de fazer o seu trabalho, apesar de sua falta de parâmetros importantes, você deve definir valores padrão, então o controlador pode não fazer o seu trabalho corretamente de qualquer maneira. A questão é melhor você perguntar a si mesmo é: você quer simplesmente uma mensagem de erro mais agradável, ou você quer que o controlador para ser capaz de fazer a sua tarefa. Neste último caso, especificando os parâmetros padrão é a melhor prática, * args e ** kwargs para cada método só para que o doesnt cliente receber um erro é um hack muito feio na minha opção.
Se você quiser alterar a exibição desses erros referem-se a /controllers/error.py
Espero que isso ajudou,
Tom