【问题标题】:Return text/html on exceptions异常返回文本/html
【发布时间】:2014-04-15 18:58:16
【问题描述】:

我试图修改代码示例here,但似乎 jsonify 让它变得很难......我在没有 jsonify 的情况下做了以下操作:

@app.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
    response = error.to_dict()
    response.status_code = error.status_code
    return response

原来第三行是这样的:

response = jsonify(error.to_dict())

我怎样才能做到这一点?我不想使用 JSON。只有文本/html

【问题讨论】:

  • 这里有什么问题?你的问题不是很清楚。你期待看到什么?你有什么错误吗?
  • 我知道了AttributeError: 'dict' object has no attribute 'status_code'
  • 我希望看到 messagestatus_code 但我希望 Content-Type 是 text/html 而不是 application/json

标签: python exception-handling flask


【解决方案1】:

好吧,我假设 error.to_dict() 返回一个字典,它没有状态代码属性(它只是一个普通的旧字典)。你可以试试这个:

@app.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
    response = error.to_dict()
    response["status_code"] = error.status_code
    return response

也就是说,字典中没有错误代码似乎很奇怪。也许更详细地说明您要完成的工作会有所帮助吗?如果你不调用倒数第二行,只返回响应,你会看到什么?

【讨论】:

  • 按照您的建议运行代码返回TypeError: 'dict' object is not callable。如果我不调用倒数第二行,它会返回相同的值。我想要完成的与here 描述的完全相同,但没有 jsonify,因为我不希望内容类型为 json
  • 您能否发布您看到的整个错误,包括堆栈跟踪?我不知道 TypeError 是否来自我的代码,或者您的代码稍后是否遇到错误,因为现在它实际上完成了错误处理程序的执行。
  • 您确定要删除 jsonify() 调用吗?你这样做是为了达到什么目的?该函数从根本上改变了错误的结构,看起来像是 Flask 必须做的事情。你有处理handle_invalid_usage()返回值的东西吗?如果不是,那么 Flask 可能期望返回一个 jsonified() 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2018-10-09
  • 2020-01-31
  • 2010-10-05
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多