4

デバイスからいくつかのデータを取得し、そのリソースが初めて要求されたときにリソースを設定する 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

前もって感謝します。

4

2 に答える 2

4

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')
于 2014-02-20T20:07:19.873 に答える
-1

カスタム例外を作成し、意味のあるコメントを付けて例外を発生させるのが好きです。例:

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
于 2014-02-20T18:46:20.230 に答える