处理控制器在turbogears中丢失控制器参数2

时间:2009-07-01 02:48:51

标签: turbogears2

假设我有一个像这样的控制器方法:

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

转到http://site/search/将导致抛出异常:TypeError:search()只接受2个参数(给定1个)。

错误是合乎逻辑的,但我宁愿更优雅地处理它。使用* args或** kwargs是避免我甚至无法捕获的错误的唯一方法吗?

编辑:我想我总是可以使用title = None,但太多可能会变得难看......

无论如何,有没有办法更优雅地捕获异常和/或处理参数不匹配?

由于

1 个答案:

答案 0 :(得分:1)

为了指定“不兼容”控制器方法签名而引发的异常仅在调试/开发模式下发生。 您不需要在生产环境中更优雅地处理它,因为一旦禁用开发模式,控制器方法在缺少必要参数时会发送HTTP 500错误。

您可能需要考虑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

我希望这是你的问题。

如果您仍希望控制器完成其工作,即使它缺少重要参数,您也必须定义默认值,否则控制器无论如何都无法正常工作。 你最好问自己的问题是:你只是想要一个更好的错误信息,或者你是否希望控制器能够完成它的任务。在后一种情况下,指定默认参数是最佳做法,* args和** kwargs对于每种方法只是因为客户没有得到错误是我选择中非常难看的黑客。

如果要更改这些错误的显示,请参阅/controllers/error.py

希望这有帮助,

汤姆