【问题标题】:How to return a more meaningful 500 error in a python-eve app如何在 python-eve 应用程序中返回更有意义的 500 错误
【发布时间】:2014-02-20 18:41:45
【问题描述】:

我在 python-eve 应用程序中有一些代码,它从设备检索一些数据并在第一次请求该资源时填充资源。有时代码无法成功连接到设备。在这种情况下,我想返回一条错误消息来更好地解释这一点,而不仅仅是一个简单的 500 错误。这是 on_fetch_item 钩子:

def before_returning_item(resource, _id, document):
if resource == "switches":
    if "interfaces" not in document.keys():
        # retrieve and store switch config if it hasn't been stored yet
        r = app.data.driver.db[resource]
        try:
            switch = prepare_switch_from_document(document)
        except socket.timeout:
            # raise some more meaningful error with message
            pass
        interface_list = switch.get_formatted_interfaces()
        r.update({'_id': _id}, {'interfaces': interface_list})
        document['interfaces'] = interface_list

app.on_fetch_item += before_returning_item

提前致谢。

【问题讨论】:

  • 你有一些奇怪的格式

标签: python eve


【解决方案1】:

您所要做的就是利用 Flask 的 abort 方法:

from flask import abort

def before_returning_item(resource, _id, document):
    if resource == "switches":
        if "interfaces" not in document.keys():
            # retrieve and store switch config if it hasn't been stored yet
            r = app.data.driver.db[resource]
            try:
                switch = prepare_switch_from_document(document)
            except socket.timeout:
                # raise some more meaningful error with message
                abort(500)
            interface_list = switch.get_formatted_interfaces()
            r.update({'_id': _id}, {'interfaces': interface_list})
            document['interfaces'] = interface_list

    app.on_fetch_item += before_returning_item

如果要添加自定义描述:

abort(500, description='My custom abort description')

【讨论】:

    【解决方案2】:

    我喜欢创建自定义异常,并提出那些有意义的 cmets,例如:

    class MyExcept(Exception): pass
    
    def before_returning_item():
        ...
        if error_condition:
            raise MyException('detailed explanation')
        ...
    
    try:
        before_returning_item()
    except MyException, exc:
        if 'device not ready' in str(exc):
            print("Device was not rdy...Try agin?")
        else:
            raise
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-23
      • 2013-09-27
      • 2019-05-13
      • 1970-01-01
      • 2021-07-27
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多