【发布时间】:2014-10-26 13:46:57
【问题描述】:
我在使用 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
【问题讨论】:
-
您的异常子类的名称为
ErrorHanlder,注意d和l的转置。您在@app.errorhandler()注册的ErrorHandler很可能不是 是一个类型,而是完全不同的东西。 -
糟糕,我会解决这个问题,但我担心这仍然不是问题。
-
异常是因为你传入
@app.errorhandler()的不是一个类,所以isinstance(thrownexception, ErrorHandler)失败并出现该错误。 -
谢谢。应该是从ErrorHandler导入ErrorHandler。
-
看,这就是为什么 PEP-8 建议您对模块使用小写名称,对类使用驼峰式名称。 :-)