在Python中抛出异常并在jQuery中读取消息

1 投票
2 回答
1621 浏览
提问于 2025-04-16 02:40

我想知道怎么在我的服务器上抛出一个异常,然后让这个异常的消息能在JavaScript中读取(我在用jQuery的AJAX)。我的服务器环境是Google App Engine(用Python)。

这是我的服务器代码:

def post(self):
    answer_text = util.escapeText(self.request.get("answer"))
    # Validation
    if ( len(str(answer_text)) < 3):
        raise Exception("Answer text must be at least 2 characters long.")
        return

这是我的AJAX请求:

$.ajax({
    type: "POST",
    url: "/store_answer.html",
    data: "question_id=" + question_id +"&answer="+answer,
    success: function(responseText){
    handleSuccessfulAnswer(question_id);
    },
    error: function(responseText){
    // TODO: How to get the exception message here???
    alert("???????????");
    },
    complete: function(data) {
    submitCompleted(submitName, "Submit");
    }
});

谢谢!

2 个回答

3

如果你在你的WSGI应用程序配置中设置了debug=True,那么当出现错误时,错误的详细信息会显示在HTTP响应的内容里,你可以在客户端解析出这些信息。

不过,不要这样做。这是不安全的,而且设计上也不好。对于那些可以预见并且可以恢复的错误情况,你应该要么捕捉到这个错误,要么根本就不要抛出错误,比如:

if ( len(str(answer_text)) < 3):
    self.error(500)
    self.response.out.write("Answer text must be at least 2 characters long.")
    return
2

在服务器上,你需要在一个叫做try/except的代码块里捕捉到错误,并把它转化成一个合适的HTTP错误。如果发生的是服务器错误,就用500这个代码;如果问题出在请求上,就用3xx的代码,等等。想了解所有的HTTP状态码,可以查看这里。然后,你可以使用Responseset_status方法来设置这个状态。

撰写回答