Manipulación controlador faltante parámetros del controlador en TurboGears 2

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

  •  21-08-2019
  •  | 
  •  

Pregunta

Supongamos que tengo un método controlador de este modo:

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

El ir a http: // Sitio / Búsqueda / causará una excepción para ser echada: TypeError: la búsqueda ( ) tiene exactamente 2 argumentos (1 dada).

El error es lógico, pero prefiero manejarlo con más gracia. Está utilizando args * o ** kwargs la única manera de evitar un error que ni siquiera parecen ser capaces de atrapar?

EDIT: Creo que siempre podía usar title = Ninguno, pero mucho de que podría ponerse feo ...

De todos modos, hay una manera de detectar la excepción y / o manipular los desajustes de los argumentos más gracia?

Gracias

¿Fue útil?

Solución

La excepción lanzado en usted para especificar un "incompatibles" controlador de método de firma sólo ocurre en el modo de depuración / desarrollo. Usted no necesita para manejar con más gracia en un entorno de producción, porque una vez que se desactiva el modo de desarrollo, los métodos de controlador envía un HTTP 500 Error cuando carecen de parámetros esenciales.

Es posible que desee considerar los respectivos ajustes en su 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 esto era su pregunta.

En el caso de que usted todavía desea que el controlador haga su trabajo, a pesar de sus carencias parámetros importantes, se deben definir los valores por defecto, de lo contrario el controlador no puede hacer su trabajo adecuadamente todos modos. La pregunta es mejor que se pregunta es: Simplemente desea un mensaje de error más agradable, o desea que el controlador sea capaz de hacer su tarea. En este último caso, especificando los parámetros por defecto es la mejor práctica, * args y ** kwargs para cada método sólo para que el cliente imposible encontrar un error es un corte muy feo en mi opción.

Si desea cambiar la visualización de estos errores se refieren a /controllers/error.py

Espero que esto ayudó,

Tom

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top