Manipulação controlador faltando parâmetros do controlador em turbogears 2

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

  •  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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top