gpt4 book ai didi

python - Flask: 'Response' 对象不可迭代并产生响应异常

转载 作者:太空狗 更新时间:2023-10-29 18:00:15 27 4
gpt4 key购买 nike

在 Flask 0.10.1 中,我似乎无法再从异常中生成响应(0.9 也是如此)。这段代码:

from flask import Flask, jsonify
from werkzeug.exceptions import HTTPException
import flask, werkzeug

print 'Flask version: %s' % flask.__version__
print 'Werkzeug version: %s' % werkzeug.__version__

app = Flask(__name__)
app.config['PROPAGATE_EXCEPTIONS'] = True

class JSONException(HTTPException):
response = None

def get_body(self, environ):
return jsonify(a=1)

def get_headers(self, environ):
return [('Content-Type', 'application/json')]

@app.route('/x')
def x():
return jsonify(a=1)

@app.route('/y')
def y():
raise JSONException()

c = app.test_client()
r = c.get('x')
print r.data
r = c.get('y')
print r.data

打印

Flask version: 0.10.1
Werkzeug version: 0.9.4
{
"a": 1
}
Traceback (most recent call last):
File "flask_error.py", line 33, in <module>
print r.data
File "/home/path/lib/python2.7/site-packages/werkzeug/wrappers.py", line 881, in get_data
self._ensure_sequence()
File "/home/path/lib/python2.7/site-packages/werkzeug/wrappers.py", line 938, in _ensure_sequence
self.make_sequence()
File "/home/path/lib/python2.7/site-packages/werkzeug/wrappers.py", line 953, in make_sequence
self.response = list(self.iter_encoded())
File "/home/path/lib/python2.7/site-packages/werkzeug/wrappers.py", line 81, in _iter_encoded
for item in iterable:
File "/home/path/lib/python2.7/site-packages/werkzeug/wsgi.py", line 682, in __next__
return self._next()
File "/home/path/lib/python2.7/site-packages/werkzeug/wrappers.py", line 81, in _iter_encoded
for item in iterable:
File "/home/path/lib/python2.7/site-packages/werkzeug/wsgi.py", line 682, in __next__
return self._next()
File "/home/path/lib/python2.7/site-packages/werkzeug/wrappers.py", line 81, in _iter_encoded
for item in iterable:
TypeError: 'Response' object is not iterable

回溯是意外的。

最佳答案

jsonify() 生成一个完整的响应对象,而不是响应主体,所以使用 HTTPException.get_response() , 而不是 .get_body():

class JSONException(HTTPException):    
def get_response(self, environ):
return jsonify(a=1)

另一种方法是只使用 json.dumps() 在这里生成一个主体:

class JSONException(HTTPException):
def get_body(self, environ):
return json.dumps({a: 1})

def get_headers(self, environ):
return [('Content-Type', 'application/json')]

关于python - Flask: 'Response' 对象不可迭代并产生响应异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22559720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com