0

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

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

转到http://site/search/将导致抛出异常: TypeError: search() 恰好需要 2 个参数(给定 1 个)。

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

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

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

谢谢

4

1 回答 1

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 只是为了让客户不会收到错误,这是我的选择中非常丑陋的 hack。

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

希望这有帮助,

汤姆

于 2009-08-15T15:44:59.673 回答