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

使用自定义错误处理程序时,如何从中止命令中访问错误消息

郎宏浚
2023-03-14

使用python烧瓶服务器,我希望能够使用abort命令抛出http错误响应,并在正文中使用自定义响应字符串和自定义消息

@app.errorhandler(400)
def custom400(error):
    response = jsonify({'message': error.message})
    response.status_code = 404
    response.status = 'error.Bad Request'
    return response

abort(400,'{"message":"custom error message to appear in body"}')

但是error.message变量显示为空字符串。我似乎找不到关于如何使用自定义错误处理程序访问中止函数的第二个变量的文档

共有3个答案

呼延衡
2023-03-14

我只是这样做:

    abort(400, description="Required parameter is missing")
洪华皓
2023-03-14

人们过于依赖abort()。事实是有更好的方法来处理错误。

例如,您可以编写以下帮助函数:

def bad_request(message):
    response = jsonify({'message': message})
    response.status_code = 400
    return response

然后,从视图函数中,您可以返回错误:

@app.route('/')
def index():
    if error_condition:
        return bad_request('message that appears in body')

如果错误发生在调用堆栈的更深处无法返回响应的地方,那么您可以使用自定义异常。例如:

class BadRequestError(ValueError):
    pass

@app.errorhandler(BadRequestError)
def bad_request_handler(error):
    return bad_request(str(error))

然后,在需要发出错误的函数中,您只需抛出异常:

def some_function():
    if error_condition:
        raise BadRequestError('message that appears in the body')

我希望这有帮助。

麻超
2023-03-14

如果您查看<code>flask/__init__。py您将看到<code>中止,特别注意第85-89行,我们可以看到第二个参数传递给<code>HTTPException__正如@dirn所指出的,init_存储在<code>description

您可以从 description 属性访问消息:

@app.errorhandler(400)
def custom400(error):
    response = jsonify({'message': error.description['message']})
    # etc.

abort(400, {'message': 'custom error message to appear in body'})

或者只是自己传递描述:

@app.errorhandler(400)
def custom400(error):
    response = jsonify({'message': error.description})
    # etc.

abort(400, 'custom error message to appear in body')
 类似资料:
  • 问题内容: 使用python flask服务器,我希望能够使用abort命令引发http错误响应,并在正文中使用自定义响应字符串和自定义消息 但是error.message变量显示为空字符串。我似乎找不到有关如何使用自定义错误处理程序访问中止功能的第二个变量的文档 问题答案: 如果您看一下,将会看到实际上是从导入的。查看该类,我们可以看到,当使用数字代码进行调用时,将查找特定的子类并使用提供给实例

  • 问题内容: 如何使用 自定义* 错误处理程序处理 解析 和 致命 错误? * 问题答案: 简单答案:不能。参见手册: 用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,以及在调用set_error_handler()的文件中引发的大多数E_STRICT。 对

  • 我们使用高图表在单个超文本标记语言页面上绘制多个图表。 然而,一个/一些图表抛出highchart错误,我们喜欢捕捉这些错误并向用户显示不同的错误。为此,highcharts确实提供了自定义错误处理程序。但这个自定义错误处理程序不提供有关抛出该错误的特定图表的信息。 这里是highcharts提供的JS Fiddle,它适用于图表: http://jsfiddle.net/gh/get/libra

  • 所有的错误最终都会被 Tango.ErrHandler 进行处理。 你可以自定义你的错误处理方式来替代默认的。例如: var ( prefix = "<html><head>tango</head><body><div>" suffix = fmt.Sprintf("</div><div>version: %s</div></body></html>", tango.Version

  • 404和500错误客户端和服务端都会通过error.js组件处理。如果你想改写它,则新建_error.js在文件夹中: import React from 'react' export default class Error extends React.Component { static getInitialProps({ res, err }) { const statusCod

  • 修改日志 2019-07-30 优化了 logger.go,日志新增了返回数据。 调用 alarm.WeChat("错误信息") alarm.Email("错误信息") alarm.Sms("错误信息") alarm.Panic("错误信息") 运行 下载源码后,请先执行 dep ensure 下载依赖包! 效果 {"time":"2019-07-23 22:55:27","alarm":