Python Flask:导致TypeError的自定义错误处理程序:isinstance()arg 2
我在使用Flask和创建自定义错误处理程序时遇到问题。我想将我的错误处理转移到一个单独的类中,并遵循以下文档: 在测试我的新错误处理程序时,返回以下消息Python Flask:导致TypeError的自定义错误处理程序:isinstance()arg 2,python,flask,typeerror,Python,Flask,Typeerror,我在使用Flask和创建自定义错误处理程序时遇到问题。我想将我的错误处理转移到一个单独的类中,并遵循以下文档: 在测试我的新错误处理程序时,返回以下消息 TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types 我相信上面的错误消息是直接来自这个签入烧瓶:但我不理解实际问题或如何解决它 自定义错误类为: class ErrorHandler(Exception): status_
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
我相信上面的错误消息是直接来自这个签入烧瓶:但我不理解实际问题或如何解决它
自定义错误类为:
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
正在运行以调用此类的代码是:
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
到
异常表示传递给
@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
>类Foo(异常):通过
...
>>>isinstance(Foo(),Foo)
符合事实的
>>>isinstance(Foo(),'something other')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:isinstance()arg 2必须是类、类型或类和类型的元组
双重检查和三重检查您有正确的对象。您的异常子类的名称为
errorhandler
,请注意d
和l
的换位。您在@app.ErrorHandler()
中注册的ErrorHandler
可能不是一个类型,而是一个完全不同的类型。哎呀,我会解决这个问题,但我担心这仍然不是问题所在。导致异常的原因是,您传递到@app.ErrorHandler()
中的任何内容都不是类,因此就是实例(thrownexception,ErrorHandler)
因该错误而失败。谢谢。它应该来自ErrorHandler导入ErrorHandler。请参阅,这就是为什么PEP-8建议对模块使用小写名称,对类使用驼峰大小写。:-)