当前位置: 首页 > 知识库问答 >
问题:

使用 Python 和 Flask 返回 API 错误消息

单耘豪
2023-03-14

我正在使用Python和Flask设计一个RESTful API。正如预期的那样,如果一切顺利,API需要接收API请求并返回数据,但在发生错误的情况下,它需要轻度失败并返回正确的错误。我通常会在出现错误时引发异常,但在这种情况下,我需要将错误消息返回给用户(try-catch block?)。

我目前处理错误的方式是让我的函数同时返回数据和错误,并在每个级别检查数据,最后将数据或错误返回给API函数的调用方。

这样做的问题是,当有多个级别的函数调用时,它可能会变得很麻烦,需要我的函数多次传递数据和错误,并每次执行检查。

有没有更好的方法来做到这一点?我可以做哪些改进来使错误传播更加简单和优雅?

下面是我当前返回错误的方式的一个例子:

def get_data()
    data1, error = get_some_data() # function not shown
    if data1 is None:
         return None, "could not retrieve data1"
    data2, error = get_some_other_data() # function not shown
    if data2 is None:
         return None, "could not retrieve data2"
    return (data1, data2), None

@app.route("/api/method", methods=['GET'])
def method():
    data, error = get_data()
    if data is None:
        if error is None:
            error = "unknown error"
        return json.dumps({ "error": error }), 500
    return json.dumps({ "data": data }), 200

共有2个答案

裴彦
2023-03-14

也许烧瓶 API 更适合您的需求,因为它是专门为 RESTful API 设计的。

它比Flask有更好的异常处理,参见:http://www.flaskapi.org/api-guide/exceptions/

佘缪文
2023-03-14

您可以使用 abort(http_code) 向客户端返回适当的 http 代码,或者只是引发非 http 异常。并使用 @app.错误处理程序() 装饰器为 http 错误和任意异常提供自定义处理程序。您也可以使用普通的 try/except 块来处理异常。Python不是Go你可以用例外。

 类似资料:
  • 我正在尝试进行rest api调用,但一直收到。从日志中可以看出,我的POJO的字段之一似乎存在问题。 我的POJO: 在我的中 运行上述代码时,我得到以下错误:

  • 我有一个运行在后端的Node/Express服务器和一个react前端,我正在尝试制作最简单的API——但无论我做什么,我似乎都在post请求中遇到了404错误。我已尝试将代理添加到包中。json,删除代理并在地址i中包含端口。。Ehttp://localhost:5000/createaccount,包括http://localhost:5000只需在post请求中使用“/createaccou

  • 在我的开发环境中,我有一个用户,我刚刚收到了以下作用域的 OAuth 令牌。 https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.events https://www.googleapis.com/auth/calendar.readonly 一切看起来都很好,我为用户存储了令牌。然后,

  • 问题内容: 我试图逐行获取两个文件之间的差异,Python总是返回false。即使我比较相同的文件,Python(几乎)总是返回false。高飞的例子,但它在Python3.4.3上复制了我的问题。 Python正确地识别出第一行是相同的,但是之后的所有内容都是错误的。有人可以复制吗?有任何想法吗? 问题答案: 第一次迭代结束后,您已经用尽了迭代器,需要返回到文件的开头。 你只检查的第一线对的线,

  • 我试图使用Gmail API将用户设置应用到Gmail帐户,但它不断返回错误400错误请求。 我可以看到错误代码在Gmail API控制台,它来自我的服务号,所以代码不可能是如此错误,但它让我发疯,只是不能找出什么是错误的。 如果有人能给我指出正确的方向,我会非常感激。

  • 问题内容: 我想在路径中找到匹配的字符串,并使用np.select创建一个新列,其中的标签取决于我找到的匹配项。 这是我写的 但是,当我运行此代码时,出现以下错误消息: ValueError:condlist中的无效条目0:应为boolean ndarray 这是我的数据样本 问题答案: 该方法在对象列上操作。此类列中可能包含非字符串值,结果是这些行而不是返回。然后抱怨,因为这不是布尔值。 幸运的