Python 派林抱怨方法';接收到的数据';对于RequestHandler,未重写
例如:Python 派林抱怨方法';接收到的数据';对于RequestHandler,未重写,python,abstract-class,tornado,pylint,Python,Abstract Class,Tornado,Pylint,例如: class MainHandler(tornado.web.RequestHandler): def get(self): self.render('data.html', items = []) 它会产生以下pylint错误: warning (W0223, abstract-method, MainHandler) Method 'data_received' is abstract in class 'RequestHandler' but is no
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('data.html', items = [])
它会产生以下pylint错误:
warning (W0223, abstract-method, MainHandler) Method 'data_received' is abstract in
class 'RequestHandler' but is not overridden
我知道它想让我重写这个
数据\u接收的方法,但我不明白为什么,以及它的作用是什么?这实际上是pylint
的一个问题,这是Python本质上不可避免的
RequestHandler类有许多方法充当钩子,您可以重写这些钩子来执行不同的操作,但根据应用程序的代码,实际上只能调用其中的一些钩子。为了确保您在使用某些功能时实现了所有应该实现的功能,当您执行一些期望您的类具有自定义实现的操作时,将触发默认的数据_接收实现
通常这不是什么问题,因为Python允许您拥有失败的代码路径,并且不会抛出任何错误。因为pylint
试图“帮助”确保您完成了所有应该做的事情,所以它看到NotImplementedError
抛出并警告您可能会根据您的操作触发它
真正的问题是,由于Python是一种解释语言,像pylint
这样的工具很难查看代码并确保其“安全”。Python为您提供了很多灵活性和功能,但反过来,您又承担了保持程序逻辑清晰的负担,并知道哪些可能的问题实际上是问题,哪些不是问题
幸运的是,pylint
知道自己的局限性,并为您提供了很好的工具来禁用无关警告。添加注释行
# pylint: disable=W0223
就在您的类定义和警告之前,应该停止为这个实例弹出,而忽略其他所有内容 首先,感谢菲利普·卡斯塔尼亚的回答,为我指明了正确的方向
我遇到了与OP相同的问题,除了我的Pycharm(2018.3.4)似乎没有使用pylint,而是使用它自己的检查引擎。我用Phillip Castagna建议的类似技巧解决了类似的问题:
# noinspection PyAbstractClass
class XyzRequestHandler(tornado.web.RequestHandler):
def prepare(self):
print('-' * 100)
self.set_header('Access-Control-Allow-Origin', '*')
def print_n_respond(self, result):
response = json.dumps(result)
print('responding with:\n', response)
print()
self.write(response)
这是。希望这能帮助那些使用与我相同设置的人。除了神秘的警告号(W0222),还可以在注释中为警告或错误写入“代码名”:pylint:disable=abstract method
。这样,注释的信息量就更大了,而不需要查找警告号。我将建议的#pylint:disable=W0223
放在继承tornado.web.Request的类之前,但警告仍然存在,如中所示,我的类名仍然用警告“类XyzRequestHandler必须实现所有抽象方法”下划线哈,问题解决了,我不好,请看下面我的答案中的细节,希望这能帮助那些使用Pycharm的人自己检查