代码之家  ›  专栏  ›  技术社区  ›  Dan

turbogears 2中的操纵控制器缺少控制器参数

  •  0
  • Dan  · 技术社区  · 17 年前

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

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

    http://site/search/ 将导致引发异常:TypeError:search()正好接受2个参数(给定1个)。

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

    编辑:我想我总是可以使用title=None,但是 太多 这一切都会变得丑陋。。。

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

    谢谢

    1 回复  |  直到 17 年前
        1
  •  1
  •   Tom    17 年前

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

    您可能需要考虑开发中的各个设置。

    # 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

    推荐文章