我有两个可能的错误,我可以在我的用例中得到:'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以错误的方式,有人能告诉我正确的方法吗?
答案 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 语句,使其成为除子句的一部分。