如何覆盖Bottle中的所有错误页面?

时间:2018-07-14 23:55:42

标签: python bottle

Bottle让我可以使用Bottle.error覆盖特定错误的处理程序,但是我正在制作JSON API,我想用一个处理程序覆盖 all 错误,以便返回JSON

如果可行,类似的事情将是最佳选择:

@bottle.error()
def error_handler(error):
    # ...

不幸的是,除非我指定HTTP状态代码,否则处理程序将被忽略。

可以做到吗?


编辑:结果是该处理程序实际上并未被忽略,默认为500。但这与问题无关。

2 个答案:

答案 0 :(得分:1)

我仔细查看了源代码,发现了默认的错误处理程序。没有子类,似乎没有一种方法可以覆盖它,所以这就是我最终得到的结果:

class JSONBottle(bottle.Bottle):
    def default_error_handler(self, error):
        return json.dumps({"error": "unexpected error"})

app = JSONBottle()

@app.error(404)
def error_404(error):
    return json.dumps({"error": "resource not found"})

这会为JSON API设置合理的默认错误消息,并让我以后针对特定错误覆盖它。

答案 1 :(得分:0)

这是我当前正在使用的解决方法。这很丑,但是我还没有找到更好的方法。

let url = `https://developer.nps.gov/api/v1/parks?` +
  `parkCode=${parkCode}&api_key=${apiKey}`;