捕获异常和处理除外:if-statement

时间:2016-01-27 20:49:38

标签: python flask

我有两个可能的错误,我可以在我的用例中得到:'RSA key format is not supported'用于错误的密码短语,'PEM encryption format not supported.'用于所需的密码短语但没有给出。这些都是ValueError类型。

我正在尝试在try-except

中执行此操作
from flask import Flask, url_for, request, json, jsonify
from Crypto.PublicKey import RSA

app = Flask(__name__)

@app.route('/key2pub', methods = ['POST'])
def api_keypub():
    if request.headers['Content-Type'] == 'application/json':

        resp = None
        try:
            pubkey = RSA.importKey(request.json['key'], request.json['passphrase'])
        except ValueError as e:
            if e == 'RSA key format is not supported':
                global resp
                resp = jsonify({"error": "Incorrect passphrase", "raw": e})
            elif e == 'PEM encryption format not supported.':
                global resp
                resp = jsonify({"error": "Passphrase missing", "raw": e})

        return resp

if __name__ == '__main__':
    app.run(debug=True);

我收到了错误:

...
ValueError: View function did not return a response

所以看起来{if {0}}没有在if语句中设置。

我怀疑我正在使用try-except以错误的方式,有人能告诉我正确的方法吗?

2 个答案:

答案 0 :(得分:2)

当你实际拥有本地的global resp时,你写信给global resp。因此,resp将被设置,但设置为None的本地None将不会更改,因此您将返回global resp。因此,如果您删除 resp = None try: pubkey = RSA.importKey(request.json['key'], request.json['passphrase']) except ValueError as e: if str(e) == 'RSA key format is not supported': resp = jsonify({"error": "Incorrect passphrase", "raw": str(e)}) elif str(e) == 'PEM encryption format not supported.': resp = jsonify({"error": "Passphrase missing", "raw": str(e)}) else: resp = jsonify({"error": "Unexpected error", "raw": str(e)}) return resp 声明,它是否正常工作。也许还设置一个默认的resp,以防你想念的另一个错误。如下所示

rm -rf /tmp

答案 1 :(得分:-1)

api_keypub是你最里面的上下文:resp是该上下文的本地。使用全局无济于事。

最重要的是,您需要缩进 if 语句,使其成为子句的一部分。