Flask: 自定义错误处理导致TypeError: isinstance()第二个参数错误
我在使用Flask的时候遇到了一个问题,想要创建一个自定义的错误处理器。我希望把错误处理的工作交给一个单独的类,并且按照这里的文档进行操作:http://flask.pocoo.org/docs/0.10/patterns/apierrors/
在测试我的新错误处理器时,返回了以下信息。
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
我觉得上面的错误信息是直接来自Flask中的这个检查:https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1407,但我不太明白具体的问题是什么,或者该怎么解决。
我的自定义错误类是:
class ErrorHandler(Exception):
status_code = 400
def __init__(self, message, status_code=None, payload=None):
Exception.__init__(self)
self.message = message
if status_code is not None:
self.status_code = status_code
self.payload = payload
def to_dict(self):
rv = dict(self.payload or ())
rv['message'] = self.message
return rv
而调用这个类的代码是:
@app.errorhandler(ErrorHandler)
def bad_request(error):
response = jsonify(error.to_dict())
response.status_code = error.status_code
return response
@app.route('/', methods=['GET', 'POST'])
def testing():
if request.method == 'GET':
raise ErrorHandler('test', 400)
elif request.methods == 'POST':
pass
else:
pass
已解决:
我把我的导入语句从
import ErrorHandler
改成了
from ErrorHandler import ErrorHandler
1 个回答
0
这个异常提示你传给 @app.errorhandler()
装饰器的东西 不是一个类。
这里的 isinstance()
测试是用你抛出的异常(在你的例子中是 ErrorHandler('test', 400)
)和你传给 @app.errorhandler()
的东西进行比较。这个异常告诉你,后者的值不是一个类:
>>> class Foo(Exception): pass
...
>>> isinstance(Foo(), Foo)
True
>>> isinstance(Foo(), 'something else')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
请仔细检查你传入的对象,确保它是正确的。