pyspider all时,出现TypeError

命令行运行pyspider all时,出现报错
C:\Users\lenovo>pyspider all
f:\anaconda\lib\site-packages\pyspider\libs\utils.py:196: FutureWarning: timeout is not supported on your platform.
warnings.warn("timeout is not supported on your platform.", FutureWarning)
phantomjs fetcher running on port 25555

[I 220122 00:16:18 result_worker:49] result_worker starting...
[I 220122 00:16:19 processor:211] processor starting...
[I 220122 00:16:19 scheduler:647] scheduler starting...
[I 220122 00:16:19 scheduler:586] in 5m: new:0,success:0,retry:0,failed:0
[I 220122 00:16:19 tornado_fetcher:638] fetcher starting...
[I 220122 00:16:19 scheduler:782] scheduler.xmlrpc listening on 127.0.0.1:23333
[I 220122 00:16:19 run:420] phantomjs exited.
[I 220122 00:16:19 app:84] webui exiting...
[I 220122 00:16:19 tornado_fetcher:671] fetcher exiting...
[I 220122 00:16:19 scheduler:663] scheduler exiting...
[I 220122 00:16:19 result_worker:66] result_worker exiting...
[I 220122 00:16:20 processor:229] processor exiting...
Traceback (most recent call last):
  File "f:\anaconda\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "f:\anaconda\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "F:\Anaconda\Scripts\pyspider.exe\__main__.py", line 7, in <module>
  File "f:\anaconda\lib\site-packages\pyspider\run.py", line 754, in main
    cli()
  File "f:\anaconda\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "f:\anaconda\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "f:\anaconda\lib\site-packages\click\core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "f:\anaconda\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "f:\anaconda\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "f:\anaconda\lib\site-packages\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "f:\anaconda\lib\site-packages\pyspider\run.py", line 165, in cli
    ctx.invoke(all)
  File "f:\anaconda\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "f:\anaconda\lib\site-packages\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "f:\anaconda\lib\site-packages\pyspider\run.py", line 497, in all
    ctx.invoke(webui, **webui_config)
  File "f:\anaconda\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "f:\anaconda\lib\site-packages\click\decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "f:\anaconda\lib\site-packages\pyspider\run.py", line 384, in webui
    app.run(host=host, port=port)
  File "f:\anaconda\lib\site-packages\pyspider\webui\app.py", line 59, in run
    from .webdav import dav_app
  File "f:\anaconda\lib\site-packages\pyspider\webui\webdav.py", line 207, in <module>
    '/': ScriptProvider(app)
TypeError: Can't instantiate abstract class ScriptProvider with abstract methods get_resource_inst




我尝试把webdav.py 18行from .app import app改为from app import app,把出问题的配置'provider_mapping': {'/': ScriptProvider(app) }注释掉,并且修改下面的'domaincontroller': NeedAuthController(app) 为'http_authenticator':{'HTTPAuthenticator':NeedAuthController(app),}居然就可以了。。虽然还不知道为啥,mark一下

题主解决了吗?

虽然把出问题的程序注释掉能运行,但这根本是哪里的问题呢?

降级 wsgidav 版本成功解决
pip install wsgidav==2.4.1
如果还遇到cannot import name 'DispatcherMiddleware'
或者ImportError: cannot import name 'ContextVar' from 'werkzeug.local'
pip install flask==1.0
pip install werkzeug==0.16.1

  1. 由问题定位到代码所在 ...ScriptProvider(app)...
  2. 进而定位到类 ScriptProvider,class ScriptProvider(DAVProvider)
  3. 由继承关系,知其父类为 DAVProvider
  4. 根据问题的描述,可知ScriptProvider继承DAVProvider后,并没有实现其内部的抽象方法 get_resource_inst
  5. 再次回到 ScriptProvider类下观察其内部存在一个几乎同名的方法名 getResourceInst
  6. 经过替换 getResourceInstget_resource_inst成功解决问题
    _____________________________________________________________________answered by haiw2

TypeError是类型错误,你传入的参数和函数定义的数据类型不匹配